В прошлый раз мы рассмотрели механику приседания в нашей 3D-игре на движке Godot Engine. В этой статье мы погрузимся в механику сколжения.
В нашей системе управления кнопка "ctrl" выполняет двойную функцию: она инициирует как приседание, так и скольжение.
Однако возникает вопрос: как мы можем активировать скольжение, если кнопка "ctrl" уже используется для приседания? Всё очень легко:
- Первым шагом мы проверяем, превышает ли текущая скорость 9.7, что можно достичь только при беге, и нажата ли клавиша приседания (ctrl). Если оба условия верны, мы устанавливаем isSliding в значение true и увеличиваем текущую скорость до значения run_speed (10) + crouch_speed * 2 (4). Однако мы можем упростить этот процесс, создав переменную slide_speed и присвоив ей значение 14.
- Далее мы проверяем, была ли отпущена клавиша во время скольжения. Если это так, мы устанавливаем значение isSliding в false. Почему не использовать оператор else? Потому что это приведет к его выполнению не только при отпускании клавиши, но и при изменении скорости, когда она станет меньше 9.7.
- Если isSliding true и скорость больше 3, тогда мы будем скользить
- В противном случае, мы устанавливаем isSliding в false и isCrouching, так isCrouching будет true при нажатии клавиши ctrl.
Разберём подробнее главную логику:
- Первым делом нам надо определить куда скользить, что и делает slide_direction: camera.global_transform.basis.z.normalized() - это вектор, указывающий направление камеры в мировом пространстве, мы его инвертируем используя -camera.global_transform.basis.z.normalized() и нормализуем, приводя к единичной длине. * current_speed - затем мы умножаем этот вектор на текущую скорость, чтобы наш персонаж не двигался как черепаха.
- Мы используем velocity.x и velocity.z для перемещения персонажа по горизонтали, не трогая velocity.y, потому что она управляет гравитацией и вертикальным движением.
- Мы плавно уменьшаем текущую скорость с 15 до 2 используя lerp.
- Плавно изменяем коллизию персонажа, используя функцию, описанную в предыдущей статье.
Основная логика реализована, но она может конфликтовать с другими функциями, поэтому нам необходимо добавить дополнительные условия для их корректной работы:
Беллиссимо! Мы разработали и разобрали код механики скольжения. Я использую его в качестве атрибута движения, но вы также можете применить его для создания скользких объектов, с которыми игрок будет взаимодействовать, например, спотыкаясь. В следующей статье мы рассмотрим, как добавить немного динамики в нашу игру. Удачи в разработке!