Найти в Дзене
Votline

Реализация Механики Скольжения в Godot Engine 3D

В прошлый раз мы рассмотрели механику приседания в нашей 3D-игре на движке Godot Engine. В этой статье мы погрузимся в механику сколжения.

В нашей системе управления кнопка "ctrl" выполняет двойную функцию: она инициирует как приседание, так и скольжение.

Однако возникает вопрос: как мы можем активировать скольжение, если кнопка "ctrl" уже используется для приседания? Всё очень легко:

Вам нужно будет создать переменные slide_direction, isSliding и height_slide
Вам нужно будет создать переменные slide_direction, isSliding и height_slide
  1. Первым шагом мы проверяем, превышает ли текущая скорость 9.7, что можно достичь только при беге, и нажата ли клавиша приседания (ctrl). Если оба условия верны, мы устанавливаем isSliding в значение true и увеличиваем текущую скорость до значения run_speed (10) + crouch_speed * 2 (4). Однако мы можем упростить этот процесс, создав переменную slide_speed и присвоив ей значение 14.
  2. Далее мы проверяем, была ли отпущена клавиша во время скольжения. Если это так, мы устанавливаем значение isSliding в false. Почему не использовать оператор else? Потому что это приведет к его выполнению не только при отпускании клавиши, но и при изменении скорости, когда она станет меньше 9.7.
  3. Если isSliding true и скорость больше 3, тогда мы будем скользить
  4. В противном случае, мы устанавливаем isSliding в false и isCrouching, так isCrouching будет true при нажатии клавиши ctrl.

Разберём подробнее главную логику:

  1. Первым делом нам надо определить куда скользить, что и делает slide_direction: camera.global_transform.basis.z.normalized() - это вектор, указывающий направление камеры в мировом пространстве, мы его инвертируем используя -camera.global_transform.basis.z.normalized() и нормализуем, приводя к единичной длине. * current_speed - затем мы умножаем этот вектор на текущую скорость, чтобы наш персонаж не двигался как черепаха.
  2. Мы используем velocity.x и velocity.z для перемещения персонажа по горизонтали, не трогая velocity.y, потому что она управляет гравитацией и вертикальным движением.
  3. Мы плавно уменьшаем текущую скорость с 15 до 2 используя lerp.
  4. Плавно изменяем коллизию персонажа, используя функцию, описанную в предыдущей статье.

Основная логика реализована, но она может конфликтовать с другими функциями, поэтому нам необходимо добавить дополнительные условия для их корректной работы:

-2

Беллиссимо! Мы разработали и разобрали код механики скольжения. Я использую его в качестве атрибута движения, но вы также можете применить его для создания скользких объектов, с которыми игрок будет взаимодействовать, например, спотыкаясь. В следующей статье мы рассмотрим, как добавить немного динамики в нашу игру. Удачи в разработке!