Сцена игрока и действия ввода
В двух следующих уроках мы будем создавать сцену игрока, оформлять пользовательские действия ввода и программировать движения игрока. К концу у вас будет персонаж, за которого можно будет играть и двигаться в восьми направлениях.
Создайте новую сцену, перейдя в меню Scene в левом верхнем углу и нажав New Scene.
Нажмите кнопку Other Node и выберите тип узла CharacterBody3D для создания CharacterBody3D как корневого узла.
Переименуйте CharacterBody3D в Player. Тела персонажей дополняют тела области и твёрдые тела, используемые в руководстве по 2D-игре. Как и твёрдые тела, они могут двигаться и сталкиваться с окружающей средой, но вместо того, чтобы управляться физическим движком, вы управляете их движением. Вы увидите, как мы используем уникальные возможности узла, когда будем кодировать механику прыжка и сжатия.
См. также
Этот документ предполагает, что вы знакомы с различными физическими телами Godot. В противном случае сначала прочитайте Введение в физику.
Для начала мы собираемся создать базовый каркас для 3D-модели нашего персонажа. Позже это позволит нам вращать модель через код, пока он проигрывает анимацию.
Добавьте узел Node3D в качестве дочернего узла для Player. Выберите узел Player в дереве Scene и нажмите кнопку «+», чтобы добавить дочерний узел. Переименуйте его в Pivot.
Затем в панели Файловая система разверните папку art/, дважды щелкнув по ней, и перетащите player.glb на Pivot.
Это должно инстанцировать модель в качестве дочерней модели Pivot. Вам нужно переименовать его в Character.
Примечание
Файлы .glb содержат данные 3D-сцены на основе открытой спецификации glTF 2.0. Они являются современной и мощной альтернативой проприетарному формату, как FBX, который Godot также поддерживает. Для создания этих файлов спроектируйте модель в Blender 3D и экспортируйте ее в glTF.
Как и для всех физических узлов, нам нужна форма столкновения, чтобы наш персонаж сталкивался с окружающей средой. Снова выберите узел Player и добавьте дочерний узел CollisionShape3D. В Inspector, в свойстве Shape, добавьте новый узел SphereShape3D.
Каркас сферы отображается под персонажем.
Это будет форма, которую использует физический движок, для расчета столкновений с окружением, поэтому мы хотим, чтобы она лучше походила именно для 3D-модели. Увеличьте её, перетащив оранжевую кнопку в окне просмотра. Моя сфера имеет радиус около 0.8 метра.
После этого передвиньте форму столкновений вверх так, чтобы её низ приблизительно совпадал с плоскостью сетки.
Чтобы упростить перемещение фигуры, можно включить или отключить видимость модели, нажав на значок глаза рядом с узлами Character или Pivot.
Сохраните сцену как player.tscn.
С готовыми узлами мы почти можем перейти к программированию. Но для начала нам необходимо определить некоторые действия ввода.
Создание действий ввода
Чтобы персонаж начал двигаться, мы обратим внимание на пользовательский ввод, например, на нажатие стрелок на клавиатуре. В Godot, хоть мы и можем писать все привязки к клавишам в коде, но зачем если существует мощная система, которая позволяет вам маркировать набор клавиш и кнопок. Это облегчает наши скрипты и делает их более читаемыми.
Эта система называется Input Map (Карта входных данных). Чтобы открыть её редактор, перейдите в меню Project и выберите Project Settings....
В верхней части есть несколько вкладок. Нажмите Input Map. Это окно позволяет добавлять новые действия вверху — ваши метки. В нижней части можно привязать клавиши к этим действиям.
Проекты Godot содержат несколько предустановленных действий, разработанных для дизайна пользовательского интерфейса (см. скриншот выше). Они станут видимыми, если включить переключатель Show Built-in Actions. Мы могли бы использовать их здесь, но вместо этого определяем свои собственные для поддержки геймпадов. Оставьте Show Built-in Actions отключенным.
Мы назовем наши действия move_left, move_right, move_forward, move_back, и jump.
Чтобы добавить действие, напишите его название в строке вверху и нажмите Enter или кнопку Add.
Создайте следующие 5 действий:
Чтобы назначить клавишу или кнопку действию, нажмите кнопку "+" справа от неё. Сделайте то же самое для move_left. Нажмите клавишу со стрелкой влево и нажмите OK.
Привяжите также клавишу A , на действие move_left.
Теперь добавим поддержку левого джойстика геймпада. Нажмите кнопку "+" ещё раз, но на этот раз выберите вход самостоятельно в дереве входов. Выберите отрицательную ось X левого джойстика в разделе Joypad Axes.
Остальные значения оставьте как есть и нажмите OK.
Примечание
Если вы хотите, чтобы контроллеры имели разные действия ввода, вам следует использовать параметр Устройства в разделе Дополнительные параметры. Устройство 0 соответствует первому подключенному геймпаду, Устройство 1 соответствует второму подключенному геймпаду и так далее.
Сделайте то же самое и для других действий ввода. К примеру, привяжите клавишу вправо, D, и правую ось левого джойстика к move_right. После того как вы привяжите все клавиши, ваш интерфейс должен выглядеть следующим образом.
Последнее действие, которое нужно настроить — jump. Назначьте клавишу «Пробел» и кнопку A геймпада, расположенную в разделе Joypad Buttons.
Действие ввода прыжка должно выглядеть следующим образом.
Это все действия, которые необходимы нам для данной игры. Вы можете использовать меню, чтобы маркировать любые группы клавиш или кнопок в ваших проектах.
В следующей части мы будем программировать и тестировать движения персонажа.