Разработка игры
April 25, 2021

С жёсткого на мягкое

Всем привет, пора вернуться на путь геймдева, теперь у нас есть всё, чтобы можно было удобно вести разработку и отправлять тестировщиками билды.

Итак, интерполированная камера в годо, на самом деле механизм очень простой, мы копируем текущее положение корабля и применяем его к камере с интерполяцией(сглаживанием перемещения) новой позиции.

Мы имеем:

Камера
Корабль

Но странность, с которой я столкнулся, камера повернута назад(в сторону уменьшения координаты Z), а корабль повернут вперед(что правильно), поэтому сначала я пытался повернуть базис камеры на 180 градусов по оси Y, что дало инвертирование положение камеры и корабля.

Как исправить? А исправить достаточно просто, нужно пойти от обратного, убрать поворот базиса и просто повернуть саму меш модель корабля на 180, и чтобы исправить косяк с тем, что корабль летит в минусовые координаты нужно ещё сам объект игрока повернуть тоже на 180.

Меш
Игрок

Потом закидываем в скрипт камеры следующий код:

extends Camera

export (Vector3) var shift = Vector3(0, 3, 6) #Сдвиг камеры(я сделал вид чуть назад и над кораблём
export (int) var smooth = 4 #С какой скоростью будет происходит возврат в заданное положение камеры, относительно корабля

onready var player = quot;../Player" #Ссылка на объект игрока

func _ready():
 make_current() #Делаем камеру текущий(у меня есть камера для вида от 1 лица чуть в объекте игрока)
 global_transform = get_new_trans() #Применяем заданное положение, если этого не сделать, то при запуске игры камера будет из нулевых координат перемещаться к заданным

  func get_new_trans(): #Для удобства модификации сделал отдельную функцию получения координат игрока
    return player.global_transform.translated(shift) #Получем глобальные координаты игрока и сдвигаем их

  func _process(delta):
 global_transform = global_transform.interpolate_with(get_new_trans(), delta*smooth)
 #Применяем к текущим координатам камеры интерполированное значение конечной точки, 
 #и движок сам нам расчитает где нужно находится камере, исходя их текущего положения и необходимого, учитывая скорость
Результат

И всё, и получаем результат, который нас устраивает. В годо всё делается просто, а если кажется, что сложно, то это временно)

Задавайте вопросы, предлагайте темы для статей, удачного геймдева!