Из чего состоит персонаж
Создайте новую сцену (Scene → New Scene), в качестве корня выберите Other Node → CharacterBody2D. Это тело, которым управляет код: оно двигается и упирается в стены, но не падает само по законам физики, как RigidBody2D.
Добавьте корню два дочерних узла: Sprite2D или AnimatedSprite2D для картинки и CollisionShape2D для формы столкновений. В инспекторе у CollisionShape2D в поле Shape выберите New CapsuleShape2D или New RectangleShape2D и подгоните размер под спрайт. Без формы движок выдаст жёлтый предупреждающий значок.
Скрипт движения за минуту
В шаблоне два числа — SPEED и JUMP_VELOCITY. Первое отвечает за скорость ходьбы, второе за силу прыжка: оно отрицательное, потому что ось Y в Godot направлена вниз.
Прикрепите скрипт
Выделите корневой узел и нажмите значок свитка со знаком плюс над деревом сцены.
Выберите шаблон
В окне Attach Node Script в поле Template выберите CharacterBody2D: Basic Movement. Godot вставит готовый код платформера с гравитацией, ходьбой стрелками и прыжком.
Сохраните сцену
Ctrl+S, имя вроде player.tscn.
Запустите
F6 запускает текущую сцену. Персонаж упадёт вниз — ему не на чем стоять, пол добавим ниже.
Вид сверху: движение в 8 направлениях
Для игры с видом сверху гравитация не нужна. Вся логика умещается в три строки внутри _physics_process: var direction = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down"), затем velocity = direction * SPEED и вызов move_and_slide().
Input.get_vector сам нормализует диагональ, поэтому персонаж не ускоряется, когда зажаты две клавиши.
Свои клавиши управления
Действия ui_left и ui_right встроены и привязаны к стрелкам. Чтобы добавить WASD или геймпад, откройте Project → Project Settings → вкладка Input Map, введите имя действия, например move_left, нажмите Add и привяжите к нему клавиши.
В коде замените встроенные имена на свои. Так же добавляются атака, рывок и взаимодействие: Input.is_action_just_pressed("attack") срабатывает один раз при нажатии.
Пол, уровень и камера
- Пол — узел StaticBody2D с CollisionShape2D. Для уровня из плиток используйте TileMapLayer с физическим слоем в наборе тайлов.
- Персонажа добавьте на сцену уровня перетаскиванием файла player.tscn из FileSystem в окно редактора.
- Камера — узел Camera2D дочерним к персонажу: она будет следовать за ним. Плавность включается свойством Position Smoothing.
- Если персонаж проваливается сквозь пол, проверьте, что слои и маски коллизий (Collision Layer и Mask) совпадают.
А если игра в 3D
Логика та же, но узлы другие: CharacterBody3D, MeshInstance3D или импортированная модель вместо спрайта, CollisionShape3D и Camera3D. У скрипта есть шаблон CharacterBody3D: Basic Movement.
Подробнее о различиях 2D и 3D в Godot — на странице сайта про 2D и 3D.
Здоровье, урон и враги
Следующий шаг после движения — здоровье. Заведите в скрипте персонажа переменную health и функцию take_damage(amount), которая уменьшает её и проверяет, не пора ли перезапустить уровень. Чтобы узнать о столкновении с врагом или шипами, добавьте персонажу узел Area2D с собственной CollisionShape2D и подключите сигнал body_entered.
Врага удобно делать отдельной сценой по тому же принципу: CharacterBody2D, спрайт, форма коллизии и простой скрипт патрулирования — идти в одну сторону, пока RayCast2D не увидит край платформы или стену. Всех врагов добавьте в группу enemies на вкладке Node → Groups, тогда персонаж сможет отличить их от других тел одной проверкой is_in_group.
Когда быстрее через ИИ-агента
Если нужен персонаж под конкретную механику — двойной прыжок, рывок, лестницы, атака с перезарядкой — опишите её ИИ-агенту LeanTech. Он напишет GDScript под Godot 4, распишет дерево узлов и объяснит каждую строку, а по ошибке из консоли найдёт причину.
Агент не работает внутри редактора Godot, не собирает сцену за вас и не делает 3D-модели. Он отдаёт код, план сцены и 2D-спрайты по описанию — вставлять их в проект вы будете сами.