В прошлый раз мы рассмотрели изменение угла обзора камеры в нашей 3D-игре на движке Godot Engine. В этой статье мы реализуем её покачивание, для большего погружения в нашу игру и динамики.
Реализация этого эффекта будет достигаться с использованием математических функций sin и cos. Вот как они выглядят:
Эти функции будут определять движение нашей камеры вдоль осей x и y внутри функции headbob(delta), которую мы создадим:
Разберём код:
- cb_time += delta * velocity.length() * float(is_on_floor()) увеличение переменной cb_time на значение, зависящее от скорости (velocity.length()) и факта, находится ли персонаж на земле (is_on_floor() возвращает 1 или 0. Это означает, что если персонаж на земле, то будет происходить покачивание, в противном случае - нет.
- Обнуляем переменную cb_pos, присваивая ей значение (0, 0, 0)
- cb_pos.y = sin(cb_time * cb_frequency) * cb_amplitude - Использование функции синуса (sin) для вертикального смещения камеры (cb_pos.y).
- cb_pos.x = cos(cb_time * cb_frequency) * cb_amplitude - Использование функции косинуса (cos) для горизонтального смещения камеры (cb_pos.x).
- camera.transform.origin = cb_pos - Установка новой позиции камеры.
Покачивание будет зависеть от скорости нашего персонажа, а значит, что при беге и ходьбе покачивание будет происходить с разной скоростью. Чтобы контролировать это, мы можем создать переменные, такие как cb_walkspeed и cb_runspeed, но я этого делать не буду.
В следующей статье мы рассмотрим добавление интерфейса пользователя(GUI) для механики выносливости в нашу игру. Удачи в разработке!