#3 Godot: 3D Platformer от BornCG. Объект персонажа игрока, код движения и прыжка

В предыдущей статье я анонсировал использование физического движка Godot...

Вообще создание падающего по дефолту блока - это и есть использование физического движка, если подумать
Вообще создание падающего по дефолту блока - это и есть использование физического движка, если подумать

Так вот, сегодня мы рассмотрим:

  • создание объекта персонажа игрока;
  • добавление кода для перемещения и прыжка.

Вот как выглядит наш проект на текущий момент.

#3 Godot: 3D Platformer от BornCG. Объект персонажа игрока, код движения и прыжка

Помните, как в предыдущем уроке мы создали падающий блок Block в другой сцене block, что помогло нам инстанцировать (хабр: инстанцировать - создать экземпляр чего-либо) объект на нашу сцену Level1? Точно так же мы создадим нашего игрового персонажа, который суть будет переиспользуемый объект в отдельной сцене.

Создаём новую пустую сцену с помощью кнопки + в панели вкладок вверху рабочего пространства.

#3 Godot: 3D Platformer от BornCG. Объект персонажа игрока, код движения и прыжка

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

Они ждут, пока ты споткнёшься
Они ждут, пока ты споткнёшься

Вместо этого в панели Сцена мы нажимаем на кнопку + и добавляем узел CharacterBody3D.

#3 Godot: 3D Platformer от BornCG. Объект персонажа игрока, код движения и прыжка

Добавляем дочерний узел MeshInstance3D и с помощью Инспектора наделяем его сущностью в виде кубика.

#3 Godot: 3D Platformer от BornCG. Объект персонажа игрока, код движения и прыжка
Свойство <b>Mesh </b>в группе <b>MeshInstance3D</b>, опция <b>Создать BoxMesh</b>
Свойство Mesh в группе MeshInstance3D, опция Создать BoxMesh

Кубик, кстати, весьма удобная форма для нашего персонажа - да, он не так идеален, как, скажем, шар, но зато при использовании кубика можно отследить, как персонаж поворачивает - и поворачивает ли вообще.

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

#3 Godot: 3D Platformer от BornCG. Объект персонажа игрока, код движения и прыжка
Свойство <b>Shape </b>в группе <b>CollisionShape3D</b>, опция <b>Создать BoxShape3D</b>
Свойство Shape в группе CollisionShape3D, опция Создать BoxShape3D

Как мы говорили в предыдущем уроке, использование дефолтных кубов при создании дочерних узлов MeshInstance3D и CollisionShape3D избавляет от необходимости подгонять форму объекта (shape) под его структуру (mesh).

Вот что у нас получилось, и такому очаровательному персонажу-кубику невозможно не придумать новое имя.

#3 Godot: 3D Platformer от BornCG. Объект персонажа игрока, код движения и прыжка

Переименуем корневой узел CharacterBody3D в... Steve?

#3 Godot: 3D Platformer от BornCG. Объект персонажа игрока, код движения и прыжка

Как бы то ни было, сохраняем сцену с помощью Ctrl+S и идём дальше.

#3 Godot: 3D Platformer от BornCG. Объект персонажа игрока, код движения и прыжка

Возвращаемся к сцене Level1 и добавляем Steve: выделяем узел Level1, чтобы Steve был дочерним узлом по отношению к корневому, нажимаем на кнопку Инстанцировать дочернюю сцену (Ctrl+Shift+A) и выбираем файл steve.tscn.

#3 Godot: 3D Platformer от BornCG. Объект персонажа игрока, код движения и прыжка

Видим, что Steve сразу же стал частью сцены...

Упс
Упс

Вытаскиваем Steve из пола и перемещаем его куда-нибудь в сторону, чтобы не придавило падающими блоками.

Как-то так
Как-то так

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

#3 Godot: 3D Platformer от BornCG. Объект персонажа игрока, код движения и прыжка

Нас смущает наличие большого числа одинаковых узлов (производные от Block). Однако мы можем упрятать все узлы падающих блоков в отдельный каталог (folder). Дело в том, что узел Node3D (который у нас является корневым, это наш узел Level1) по существу является просто контейнером для 3D объектов в сцене. И так как узел Node3D не является новым объектом, мы можем использовать его в качестве сворачиваемого каталога для дочерних узлов, чтобы навести красоту в нашем дереве объектов.

Добавляем дочерний узел Node3D...

#3 Godot: 3D Platformer от BornCG. Объект персонажа игрока, код движения и прыжка

...переименовываем его в Blocks...

#3 Godot: 3D Platformer от BornCG. Объект персонажа игрока, код движения и прыжка

...и перетаскиваем в этот каталог все объекты Block1-Block4.

#3 Godot: 3D Platformer от BornCG. Объект персонажа игрока, код движения и прыжка

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

#3 Godot: 3D Platformer от BornCG. Объект персонажа игрока, код движения и прыжка

Наконец запустим сцену (про сохранение я уже не говорю, думайте сами).

Удачное расположение камеры, конечно

Падающие блоки падают, а вот Steve не реагирует на нажатие клавиш и не трогается с места. Значит, настало время добавить в наш проект капельку интерактивности.

#3 Godot: 3D Platformer от BornCG. Объект персонажа игрока, код движения и прыжка

Ткнём на нашего Steve в панели Сцена, чтобы выделить его, и обратим внимание на кнопку Прикрепить новый или существующий скрипт к выбранному узлу. В принципе эта кнопка позволяет добавить файл кода на языке GDScript к любому выбранному объекту сцены.

Честно, я старался выделить эту кнопку покрасивее
Честно, я старался выделить эту кнопку покрасивее

Однако не совсем правильно будет добавлять код к Steve прямо сейчас, в сцене Level1 - ведь мы же создали экземпляр нашего Steve, который в целом находится во вкладке steve. Хорошим тоном будет добавить файл кода именно к оригинальному Steve, а не к инстанцированному.

Нажимаем на хитрую кнопку возле узла Steve в панели Сцена...

Найдите с трёх раз
Найдите с трёх раз

...переходим во вкладку steve и вот теперь нажимаем на кнопку добавления файла кода.

Не забываем сначала выделить <b>Steve</b>
Не забываем сначала выделить Steve
#3 Godot: 3D Platformer от BornCG. Объект персонажа игрока, код движения и прыжка

Оставляем все настройки по умолчанию, чтобы наследовать готовые скрипты для узла CharacterBody3D, и нажимаем Создать.

Хоба! Текст кода приводить не буду, потому что сегодня мы с ним всё равно не будем работать
Хоба! Текст кода приводить не буду, потому что сегодня мы с ним всё равно не будем работать

Движок создал файл кода и привязал его к корневому узлу Steve (который является узлом CharacterBody3D, как мы помним). Перейти на вкладку с кодом мы можем с помощью соответствующей кнопки возле узла Steve в панели Сцена.

#3 Godot: 3D Platformer от BornCG. Объект персонажа игрока, код движения и прыжка

Ещё перейти на вкладку с кодом можно вручную с помощью второй соответствующей кнопки, но уже в верхней части рабочего пространства.

#3 Godot: 3D Platformer от BornCG. Объект персонажа игрока, код движения и прыжка

Посмотрим, что изменилось после добавления кода. Сохраняем изменения (чёрт, я же обещал не предупреждать о сохранениях -_-), переходим на вкладку level_1 и запускаем сцену Level1.

Замечаем позитивные изменения:

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

Сегодняшняя статья получилась небольшой, но оно и к лучшему. У меня в запасе есть несколько часов до рассвета, и я планирую поспать (да и вам пора).

No comments. Это Голден Бой, кстати
No comments. Это Голден Бой, кстати
5
1 комментарий