Как Unity-разработчику перейти на Godot: полный гайд по созданию Flappy Bird

freeCodeCamp.org 50,4 тыс. 1 ч 3 мин 16.10.2023
Главное

Переход с одного игрового движка на другой всегда сопряжен с трудностями адаптации к новому интерфейсу и логике работы. В данном материале опытный разработчик Омар Заки проводит подробный мастер-класс для пользователей Unity и новичков, решивших освоить Godot, демонстрируя процесс создания клона Flappy Bird с нуля.

🛠 Начало работы: интерфейс и первая сцена 1:49

Процесс освоения Godot начинается с понимания структуры проекта. В отличие от многих других движков, Godot поставляется в виде одного исполняемого файла, что делает его крайне востребованным среди разработчиков, ценящих портативность . При создании проекта пользователь может выбрать один из трех рендереров: Forward+ (для продвинутой 3D-графики), Mobile или Compatibility (наиболее подходящий для 2D-игр и старых устройств) .

Интерфейс Godot разделен на логические блоки:

Одной из первых проблем, с которыми сталкиваются разработчики при импорте 2D-активов, является размытость пиксельной графики. Омар Заки объясняет, что по умолчанию в Godot включена линейная фильтрация. Чтобы добиться четкости «пиксель в пиксель» (Pixel Art), необходимо в настройках проекта (Project Settings) изменить параметр Default Texture Filter с Linear на Nearest .

🐦 Физика и управление персонажем 11:55

Ключевое различие между Godot и Unity, на которое указывает автор, заключается в поведении физических объектов. Узел RigidBody2D в Godot имитирует реальную физику: например, брошенный мяч со временем теряет инерцию и останавливается, в то время как в Unity он может бесконечно прыгать на одну и ту же высоту без дополнительных настроек .

Для создания игрока (птицы) используется следующая структура узлов:

  1. RigidBody2D: корневой узел, отвечающий за гравитацию и столкновения.
  2. AnimatedSprite2D: заменяет стандартный спрайт и позволяет легко создавать анимацию полета из набора кадров (Sprite Sheets) .
  3. CollisionShape2D: определяет физические границы объекта. Важно, чтобы форма коллизии соответствовала визуальному размеру спрайта .

Программирование в Godot ведется на языке GDScript, который синтаксически очень близок к Python. Омар отмечает, что разработчики на C# также могут использовать свой любимый язык, импортировав соответствующую версию движка . Управление птицей реализуется через функцию _input, которая отслеживает нажатия кнопок мыши. Омар рекомендует использовать метод set_linear_velocity для придания импульса вверх (в Godot отрицательное значение по оси Y означает движение вверх) и set_angular_velocity для создания эффекта вращения при прыжке .

🌍 Мир игры: тайлсеты и параллакс 29:10

Создание окружения в Godot реализовано через мощный инструмент TileMap. Заки утверждает, что функционал тайлсетов в Godot 4 уникален и превосходит многие другие движки . Процесс настройки включает создание физического слоя непосредственно в ресурсе тайлсета, что позволяет автоматически добавлять коллизии всем нарисованным элементам пола или стен .

Для создания эффекта глубины и бесконечного движения используется узел ParallaxBackground:

🚧 Динамические препятствия и глобальные скрипты 42:23

Одной из самых сложных задач для новичков является процедурная генерация уровней. Омар демонстрирует метод создания труб через сохранение ветки узлов как отдельной сцены (Save Branch as Scene) . Затем трубы инстанцируются (создаются копии) в коде с помощью метода instantiate() .

Для реализации системы подсчета очков автор вводит понятие Autoload (или Singleton). Это глобальные скрипты, которые загружаются при старте игры и доступны из любого другого скрипта .

В завершение урока Омар Заки подчеркивает, что хотя переход на новый инструмент может быть непривычным, Godot предлагает интуитивно понятную систему узлов и сигналов, которая значительно упрощает разработку после преодоления начального порога входа .

💬 Цитаты

«GDScript — это в основном Python. Если вы знаете Python, у вас все будет в порядке.»

Омар Заки 20:55

«В Godot RigidBody на самом деле имитирует реальный мяч: он теряет импульс, в отличие от Unity.»

Омар Заки 14:10
👥 Спикер
🔗 Упомянутые сайты и проекты
📖 Термины
Node (Узел)
Базовый строительный блок в Godot, выполняющий определенную функцию (спрайт, звук, физика).
Scene (Сцена)
Дерево узлов, которое может быть сохранено и использовано как самостоятельный объект или уровень.
GDScript
Высокоуровневый объектно-ориентированный язык программирования, используемый в Godot.
Signals (Сигналы)
Механизм делегирования событий, позволяющий узлам сообщать другим узлам о происшествиях (например, о столкновении).
📊 Цифры
⚖️ Другая сторона
Технологии и IT Godot Engine GDScript Game Development Unity Flappy Bird