Как создать 2D игру в Godot Engine: полное руководство для новичков

Пройдите тест, узнайте какой профессии подходите
Сколько вам лет
0%
До 18
От 18 до 24
От 25 до 34
От 35 до 44
От 45 до 49
От 50 до 54
Больше 55

Для кого эта статья:

  • Новички в разработке игр, заинтересованные в создании 2D игр
  • Люди, желающие изучить основы использования движка Godot
  • Ученики и студенты, заинтересованные в геймдеве и программировании

    Разработка игр перестала быть привилегией крупных студий с миллионными бюджетами. Сегодня создать свою собственную игру может практически каждый, особенно с такими инструментами как Godot Engine – бесплатный, открытый движок с интуитивно понятным интерфейсом. Однако даже с самым дружелюбным инструментом новички часто теряются, не понимая, с чего начать путь в геймдев. В этой статье я проведу вас через все ключевые этапы создания 2D игры на Godot – от установки движка до публикации готового проекта. Поехали! 🚀

Мечтаете создавать игры, но не знаете, с чего начать? Курс Обучение веб-разработке от Skypro даст вам фундаментальные навыки программирования, которые станут отличной базой для работы с игровыми движками, включая Godot. Вы освоите JavaScript, научитесь работать с интерактивными элементами и анимациями – всё это пригодится при разработке 2D игр. Начните свой путь в геймдев с прочного фундамента веб-разработки!

Первые шаги в Godot: установка и знакомство с интерфейсом

Прежде чем погрузиться в увлекательный мир создания игр, необходимо правильно настроить рабочее окружение. Установка Godot Engine — это первый и, пожалуй, самый простой шаг в вашем путешествии.

Для начала скачайте последнюю стабильную версию движка с официального сайта godotengine.org. Godot доступен для всех основных операционных систем: Windows, macOS и Linux. Удобство Godot в том, что он не требует сложной установки — достаточно скачать архив, распаковать его и запустить исполняемый файл. 🖥️

После запуска вы увидите стартовый экран проектов. Здесь вы можете создать новый проект, нажав кнопку "Новый проект", или открыть существующий. При создании нового проекта вам потребуется указать название и путь для сохранения, а также выбрать рендерер (для 2D игр рекомендую Vulkan).

Алексей Петров, руководитель курса по геймдизайну Помню, как мой студент Дмитрий, художник без опыта программирования, впервые столкнулся с Godot. Он открыл редактор и буквально застыл перед монитором, не понимая, куда кликать. "Это слишком сложно", — сказал он мне на следующий день. Я предложил ему подход "от простого к сложному": сначала просто создать пустой проект и изучить основные панели, затем добавить простой спрайт и научиться перемещать его по экрану. Через неделю Дмитрий уже показывал мне свой первый прототип платформера с анимированным персонажем. "Оказывается, нужно было просто разбить процесс на маленькие шаги", — признался он.

После создания проекта вы окажетесь в редакторе Godot, который может показаться сложным на первый взгляд. Давайте разберём основные элементы интерфейса:

Элемент интерфейса Расположение Назначение
FileSystem Обычно слева внизу Управление файлами проекта
Scene Слева вверху Иерархическая структура текущей сцены
Inspector Справа Настройка свойств выбранного объекта
2D/3D Viewport Центр экрана Основная рабочая область для редактирования
Output/Debugger Внизу Информация о выполнении и отладке

Чтобы начать работу с 2D проектом, я рекомендую сначала создать новую сцену, выбрав 2D Scene как корневой узел. Это можно сделать через меню Scene -> New Scene или нажав Ctrl+N.

Не бойтесь экспериментировать с интерфейсом — Godot позволяет настраивать расположение панелей под ваши предпочтения. Если вы случайно закроете какую-то панель, вернуть её можно через меню View -> Docks.

Для удобной работы рекомендую также ознакомиться с основными горячими клавишами:

  • F5 — запустить проект
  • F6 — запустить текущую сцену
  • Ctrl+S — сохранить текущую сцену
  • Ctrl+A — выбрать все объекты
  • Q, W, E, R — переключение между инструментами выбора, перемещения, масштабирования и вращения
Пошаговый план для смены профессии

Основы 2D-разработки в Godot: сцены, узлы и ресурсы

Философия Godot базируется на трёх ключевых концепциях: сцены, узлы и ресурсы. Понимание этих элементов критически важно для эффективной работы с движком. 🧩

Сцены (Scenes) — это контейнеры, которые организуют игровой мир. Каждая сцена представляет собой отдельный уровень, меню или любой другой логический блок игры. Вы можете вкладывать сцены одну в другую, создавая модульную структуру проекта.

Узлы (Nodes) — базовые строительные блоки, из которых состоят сцены. Каждый узел имеет своё назначение: Node2D для 2D объектов, Sprite для отображения изображений, Area2D для обработки столкновений и т.д.

Ресурсы (Resources) — это данные, используемые в игре: текстуры, звуки, скрипты. Ресурсы могут быть повторно использованы в разных сценах.

Для создания 2D игры вам понадобятся следующие типы узлов:

  • Node2D — базовый узел для всех 2D объектов
  • Sprite — для отображения изображений
  • AnimatedSprite — для анимированных спрайтов
  • KinematicBody2D — для персонажей с физическим поведением
  • Area2D — для областей, реагирующих на столкновения
  • CollisionShape2D — определяет форму столкновения
  • Camera2D — отвечает за отображаемую область игры

Чтобы создать иерархию узлов, выберите родительский узел и добавьте дочерние через кнопку "+" в панели Scene или через меню правой кнопки мыши.

Сцены в Godot сохраняются в формате .tscn. Чтобы создать новую сцену, используйте Scene -> New Scene, а для сохранения — Scene -> Save Scene или Ctrl+S. Каждая сцена должна иметь корневой узел, который определяет её тип.

Тип сцены Рекомендуемый корневой узел Применение
Игровой уровень Node2D Основная игровая сцена с игровой логикой
UI (интерфейс) Control или CanvasLayer Меню, HUD, экраны загрузки
Игровой персонаж KinematicBody2D Игрок или NPC с физикой
Предмет/объект Area2D Собираемые предметы, триггеры
Эффект Particles2D Визуальные эффекты, частицы

Для связывания узлов с кодом в Godot используется встроенный язык GDScript, синтаксически похожий на Python. Вот простой пример скрипта для движения спрайта:

gdscript
Скопировать код
extends Sprite

export var speed = 200

func _process(delta):
var velocity = Vector2()
if Input.is_action_pressed("ui_right"):
velocity.x += 1
if Input.is_action_pressed("ui_left"):
velocity.x -= 1
if Input.is_action_pressed("ui_down"):
velocity.y += 1
if Input.is_action_pressed("ui_up"):
velocity.y -= 1

if velocity.length() > 0:
velocity = velocity.normalized() * speed

position += velocity * delta

Чтобы добавить скрипт к узлу, выберите узел и нажмите кнопку "Attach Script" на панели инструментов или используйте правую кнопку мыши -> "Attach Script".

Создаём простую 2D-игру: от спрайтов до управления

Теперь, когда вы знакомы с основными концепциями Godot, давайте создадим простую 2D игру: персонажа, который может перемещаться по экрану и собирать монеты. 🎮

Первым шагом нужно подготовить спрайты. Вы можете создать их самостоятельно или использовать бесплатные ресурсы с сайтов вроде OpenGameArt, Kenney или itch.io. Для нашей игры понадобятся:

  • Спрайт персонажа (желательно с кадрами анимации)
  • Спрайт монеты
  • Тайлы для фона (опционально)

Создайте в проекте папку "assets" и импортируйте туда все спрайты. В Godot это делается простым перетаскиванием файлов из файлового менеджера в панель FileSystem редактора.

Теперь создадим сцену персонажа:

  1. Создайте новую сцену (Scene -> New Scene)
  2. Выберите KinematicBody2D как корневой узел и переименуйте его в "Player"
  3. Добавьте узел AnimatedSprite как дочерний к Player
  4. Настройте кадры анимации в Inspector, нажав на свойство Frames и создав новый SpriteFrames
  5. Добавьте анимации "idle", "walk", "jump", загрузив соответствующие кадры
  6. Добавьте узел CollisionShape2D и настройте форму коллизии, соответствующую вашему спрайту

Мария Соколова, разработчик инди-игр Когда я создавала свою первую игру на Godot, я потратила два дня, пытаясь понять, почему мой персонаж проваливается сквозь платформу. Всё выглядело правильно: у персонажа был KinematicBody2D, у платформы — StaticBody2D, оба имели CollisionShape2D. Но персонаж упорно игнорировал физику. Оказалось, я забыла активировать обработку физики в скрипте персонажа! Нужно было добавить вызов moveandslide() для применения физических расчётов. Эта ошибка научила меня важному правилу Godot: недостаточно просто добавить компоненты — нужно также правильно обработать их в коде.

Теперь добавим скрипт для управления персонажем. Прикрепите скрипт к узлу Player:

gdscript
Скопировать код
extends KinematicBody2D

const SPEED = 300
const GRAVITY = 1200
const JUMP_FORCE = 600

var velocity = Vector2.ZERO

onready var animated_sprite = $AnimatedSprite

func _physics_process(delta):
# Гравитация
velocity.y += GRAVITY * delta

# Горизонтальное движение
var direction = Input.get_action_strength("ui_right") – Input.get_action_strength("ui_left")
velocity.x = direction * SPEED

# Прыжок
if is_on_floor() and Input.is_action_just_pressed("ui_up"):
velocity.y = -JUMP_FORCE

# Применение движения
velocity = move_and_slide(velocity, Vector2.UP)

# Анимация
update_animation(direction)

func update_animation(direction):
if direction != 0:
animated_sprite.flip_h = direction < 0
animated_sprite.play("walk")
else:
animated_sprite.play("idle")

if !is_on_floor():
animated_sprite.play("jump")

Теперь создадим сцену монеты:

  1. Создайте новую сцену с корневым узлом Area2D и назовите его "Coin"
  2. Добавьте дочерний узел AnimatedSprite и настройте анимацию вращения монеты
  3. Добавьте узел CollisionShape2D с формой Circle
  4. Добавьте скрипт к узлу Coin для обработки сбора монеты
gdscript
Скопировать код
extends Area2D

signal coin_collected

func _ready():
connect("body_entered", self, "_on_body_entered")

func _on_body_entered(body):
if body.is_in_group("player"):
emit_signal("coin_collected")
$AnimationPlayer.play("collect") # Анимация исчезновения
yield($AnimationPlayer, "animation_finished")
queue_free() # Удаление монеты после сбора

Наконец, создадим главную сцену игры:

  1. Создайте новую сцену с корневым узлом Node2D и назовите его "Game"
  2. Добавьте узел TileMap для создания уровня (если у вас есть тайлсет)
  3. Добавьте экземпляр сцены Player (Инстанцирование: Сцена -> Новый экземпляр)
  4. Разместите несколько экземпляров сцены Coin
  5. Добавьте узел Label для отображения счёта
  6. Добавьте скрипт к узлу Game для обработки игровой логики
gdscript
Скопировать код
extends Node2D

var score = 0

onready var score_label = $ScoreLabel

func _ready():
update_score_display()
# Подключаем все монеты к обработчику сигналов
for coin in get_tree().get_nodes_in_group("coins"):
coin.connect("coin_collected", self, "_on_coin_collected")

func _on_coin_collected():
score += 1
update_score_display()

func update_score_display():
score_label.text = "Score: " + str(score)

Не забудьте добавить персонажа в группу "player" (в инспекторе узла Player), а монеты — в группу "coins" для корректной работы скриптов.

Чтобы запустить игру, выберите сцену Game и нажмите F5 или кнопку Play в верхнем правом углу интерфейса Godot.

Физика и коллизии: взаимодействие объектов в Godot

Физика и коллизии — важнейшие компоненты любой игры, определяющие взаимодействие объектов между собой. В Godot система физики и коллизий хорошо проработана и относительно проста в использовании. 🧪

В Godot существует несколько типов физических тел:

  • StaticBody2D — неподвижные объекты, такие как платформы или стены
  • RigidBody2D — объекты с полноценной физической симуляцией, подверженные гравитации и столкновениям
  • KinematicBody2D — объекты, управляемые программно, но взаимодействующие с физическим миром
  • Area2D — области, обнаруживающие вхождение других объектов, но не имеющие физической реакции

Для работы с коллизиями каждому физическому телу нужно добавить форму столкновения — CollisionShape2D или CollisionPolygon2D. Первая использует предопределенные формы (прямоугольник, круг, капсулу), вторая позволяет создать произвольный многоугольник.

Давайте расширим нашу игру, добавив более сложные физические взаимодействия:

  1. Создание платформ

Для создания платформ используйте StaticBody2D с CollisionShape2D:

  • Добавьте узел StaticBody2D
  • Добавьте к нему дочерний узел Sprite для визуального отображения
  • Добавьте узел CollisionShape2D и настройте форму (обычно RectangleShape2D)
  1. Создание движущейся платформы
gdscript
Скопировать код
extends StaticBody2D

export var move_speed = 100
export var move_distance = 200

var start_position
var target_position
var moving_to_target = true

func _ready():
start_position = position
target_position = position + Vector2(move_distance, 0)

func _physics_process(delta):
var direction = 1 if moving_to_target else -1
position += Vector2(direction * move_speed * delta, 0)

if moving_to_target and position.x >= target_position.x:
moving_to_target = false
elif not moving_to_target and position.x <= start_position.x:
moving_to_target = true

  1. Создание врага

Враги могут быть реализованы как KinematicBody2D или RigidBody2D, в зависимости от требуемого поведения:

gdscript
Скопировать код
extends KinematicBody2D

var speed = 100
var direction = Vector2.RIGHT
var velocity = Vector2.ZERO
const GRAVITY = 800

func _physics_process(delta):
# Применяем гравитацию
velocity.y += GRAVITY * delta

# Устанавливаем горизонтальную скорость
velocity.x = direction.x * speed

# Перемещаем врага
velocity = move_and_slide(velocity, Vector2.UP)

# Проверяем столкновение со стеной
if is_on_wall():
direction = -direction
$Sprite.flip_h = direction.x < 0

  1. Обработка урона при столкновении

Для обработки получения урона игроком при столкновении с врагом можно использовать Area2D, добавленный к врагу:

gdscript
Скопировать код
# В скрипте врага

func _ready():
$DamageArea.connect("body_entered", self, "_on_DamageArea_body_entered")

func _on_DamageArea_body_entered(body):
if body.is_in_group("player") and body.has_method("take_damage"):
body.take_damage(1)

# В скрипте игрока добавляем метод:

var health = 3

func take_damage(amount):
health -= amount
if health <= 0:
die()
else:
play_hit_animation()

func die():
# Анимация смерти
$AnimatedSprite.play("die")
yield($AnimatedSprite, "animation_finished")
# Перезапуск уровня
get_tree().reload_current_scene()

  1. Использование слоёв коллизий (Collision Layers)

Godot позволяет настраивать, какие объекты взаимодействуют друг с другом, с помощью слоёв коллизий. В инспекторе физического тела найдите свойства Collision Layer и Collision Mask.

  • Layer определяет, к какой группе принадлежит объект
  • Mask определяет, с какими группами объект будет сталкиваться

Например, можно настроить так, чтобы пули игрока сталкивались только с врагами, но не с другими пулями или игроком.

  1. Raycast для обнаружения препятствий

RayCast2D позволяет обнаруживать объекты в определенном направлении без физического контакта:

gdscript
Скопировать код
# В скрипте врага

onready var edge_detector = $EdgeDetector # RayCast2D, направленный вниз с края платформы

func _physics_process(delta):
# Если raycast не пересекается с платформой – значит, впереди обрыв
if not edge_detector.is_colliding() and is_on_floor():
direction = -direction
$Sprite.flip_h = direction.x < 0
# Перемещаем raycast на другой край
edge_detector.position.x = $CollisionShape2D.shape.extents.x * direction.x

От прототипа к релизу: тестирование и публикация игры

После создания базового прототипа игры необходимо отполировать её до состояния готового продукта. Этот процесс включает тестирование, оптимизацию и, наконец, публикацию. 🚀

Тестирование — критически важный этап разработки. Godot предлагает несколько инструментов для упрощения этого процесса:

  • Встроенный отладчик — позволяет отслеживать переменные, контролировать выполнение кода
  • Мониторинг производительности — анализ FPS и использования памяти
  • Удаленная отладка — для тестирования на мобильных устройствах

Вот простой план тестирования для вашей первой 2D игры:

  1. Проверьте все игровые механики на работоспособность
  2. Убедитесь, что коллизии работают корректно
  3. Протестируйте крайние случаи: что происходит, если игрок падает за край уровня?
  4. Проверьте плавность анимаций и отзывчивость управления
  5. Убедитесь, что пользовательский интерфейс понятен и функционален

При обнаружении ошибок (багов) ведите их учёт, например, в текстовом документе или с помощью систем управления задачами (Trello, GitHub Issues).

Перед публикацией необходимо оптимизировать игру, чтобы она работала плавно на целевых устройствах:

  • Сократите размеры текстур, используя форматы с сжатием
  • Объедините статичные элементы в один спрайт, где это возможно
  • Используйте object pooling для часто создаваемых объектов
  • Отключайте физические расчёты для объектов, находящихся далеко от игрока

Для релиза вашей игры в Godot используется система экспорта. Прежде чем экспортировать проект, убедитесь, что установлены шаблоны экспорта для целевых платформ (Project -> Export -> Manage Export Templates).

Процесс экспорта:

  1. Выберите Project -> Export
  2. Нажмите "Add..." и выберите целевую платформу
  3. Настройте параметры экспорта (имя, иконка, сертификаты для мобильных устройств)
  4. Нажмите "Export Project..." для создания исполняемого файла
Платформа Особенности экспорта Требования
Windows Создаёт .exe файл Шаблоны экспорта для Windows
macOS Создаёт .app или .dmg Шаблоны экспорта для macOS, подписание для дистрибуции
Linux Создаёт исполняемый файл Шаблоны экспорта для Linux
Web (HTML5) Создаёт .html и .js файлы Шаблоны экспорта для HTML5
Android Создаёт .apk Android SDK, Java JDK, шаблоны экспорта
iOS Создаёт проект Xcode Mac с Xcode, шаблоны экспорта, Apple Developer аккаунт

После успешного экспорта вы можете распространять свою игру через различные платформы:

  • Steam — требуется регистрация как разработчика (100$)
  • itch.io — бесплатная платформа для инди-игр
  • Google Play — для Android игр (единоразовый платёж 25$)
  • App Store — для iOS игр (99$ в год)

Важный аспект публикации — маркетинг вашей игры. Даже самая лучшая игра может остаться незамеченной без правильного продвижения:

  • Создайте привлекательную страницу игры с скриншотами и трейлером
  • Участвуйте в игровых форумах и сообществах
  • Используйте социальные сети для создания сообщества вокруг вашей игры
  • Отправляйте пресс-релизы в игровые СМИ
  • Рассмотрите возможность участия в игровых выставках и конкурсах

После релиза не забудьте собирать отзывы игроков и выпускать обновления, исправляющие найденные ошибки и добавляющие новый контент. Поддержка игры после выпуска может значительно увеличить её жизненный цикл.

Создание 2D игр на Godot — доступный и увлекательный путь в мир геймдева. Начав с простых проектов и постепенно осваивая всё более сложные концепции, вы сможете реализовать практически любую игровую идею. Ключ к успеху — регулярная практика, изучение новых техник и готовность экспериментировать. Движок Godot с его открытостью и активным сообществом станет надёжным фундаментом для ваших творческих экспериментов. Превратите своё хобби в профессию или просто наслаждайтесь процессом создания собственных игровых миров — в любом случае, первый шаг уже сделан!

Читайте также

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какова основная цель GDScript в Godot?
1 / 5

Загрузка...