В прошлый раз мы рассмотрели механику бега и выносливости в нашей 3D-игре на движке Godot Engine. В этой статье мы погрузимся в механику приседания, а так же рассмотрим один возможный баг с коллизией.
Сначала нам нужно добавить клавишу для приседания в Input Map:
Теперь перейдем в наш главный скрипт "Player Controller" и объявим там несколько переменных: isCrouching, crouch_speed, height_normal и height_crouch:
Теперь давайте создадим функцию crouch(), в которой будет содержаться основная логика нашей механики приседания:
Разберём скрипт:
- Мы начнем с проверки, бежит ли игрок и нажата ли клавиша действия "crouch". Если оба условия верны, то мы устанавливаем значение переменной isCrouching на true, иначе false.
- Если переменная isCrouching установлена в true, мы изменяем значение высоты капсульной коллизии плавно. Затем мы также плавно изменяем значение скорости на скорость при приседании.
- Иначе, мы изменяем значение высоты нашей коллизии, на нормальное.
Вы можете оставить скрипт в этом состоянии, но я добавлю функцию height_change:
Но с каким багом вы можете столкнуться? Это может произойти, если ваш персонаж по transform имеет разные размеры по разным осям. Например, при приседании вы изменяете не высоту коллизии, а размер по оси Y (scale.y), что приведёт к следующему багу:
Вот и всё! В следующей статье мы рассмотрим довольно интересную механику - скольжение (slide). Удачи в разработке!