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

Источник: https://www.youtube.com/watch?v=1EFKe24X8vI
Канал: freeCodeCamp.org
Опубликовано: 16.10.2023

---

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

## 🛠 Начало работы: интерфейс и первая сцена
[[JUMP:01:49]]

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

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

*   **File System (внизу слева):** хранилище всех ресурсов, скриптов и сцен [03:05].
*   **Scene Tree (вверху слева):** иерархия узлов (nodes), из которых состоит текущая сцена [03:20].
*   **Inspector (справа):** панель свойств выбранного объекта [04:00].
*   **Центральная область:** рабочее пространство, переключаемое между 2D, 3D и редактором скриптов [03:47].

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

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

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

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

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

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

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

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

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

*   Он позволяет слоям фона двигаться с разной скоростью относительно камеры.
*   С помощью свойства `Mirroring` можно зациклить текстуру, создавая видимость бесконечного пространства [32:40].
*   Движение фона реализуется через скрипт, изменяющий `scroll_base_offset` с учетом переменной `Delta` для обеспечения плавности на разных FPS [31:00].

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

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

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

*   В глобальном скрипте `Global.gd` хранится переменная `points`.
*   В сцене трубы размещается узел **Area2D**, который служит «детектором» пролета птицы.
*   При вхождении птицы в эту зону сигнал `body_entered` увеличивает счет в глобальном скрипте [59:00].

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