Кто-нибудь знает, как сделать что-то вроде 3D-наведения ракеты в Godot 3.2, которое позволяет ограничивать угловую скорость? Все, что я нашел в Интернете, использует что-то вроде global_transform = global_transform.look_at(aTarget.global_transform.origin)
. Однако это мгновенно поворачивает преобразование, что очень нереально. Я также видел несколько упоминаний об использовании класса Quat
, где вы затем используете aQuatFrom.slerp(aQuatTo,aAmount)
; однако у меня это тоже не сработало (хотя, может, я просто что-то не понимаю?).
Давайте просто скажем, ради этого разговора, что существует Missile.gd
файл, который содержит по крайней мере следующие элементы данных, которые инициализируются при создании экземпляра:
extends KinematicBody
var _velocity : Vector3
var _speed : float
var _max_angle_rate : float
var _target : Object
Как бы вы рассчитали новую скорость на каждом временном шаге? Я пробовал использовать преобразования, кватернионы и углы Эйлера, но ни с одним из них не повезло. Иногда может показаться, что некоторые попытки срабатывают, но не во всех случаях. Я занимаюсь этим уже некоторое время, но безуспешно, поэтому был бы очень благодарен за любую помощь, которую вы можете предложить.
На данный момент большая часть борьбы состоит только в том, как изменить данные, которые мне нужно изменить. Я могу заниматься векторной математикой, но не могу получить нужные мне данные из Godot. Я не совсем знаком с Quaternions, так что, возможно, там есть решение, которое мне не хватает, я не уверен. Тем не менее, я думаю, что на данный момент достаточно решения для чистого наведения на преследование (то есть просто наведения на цель). Как только я получу это, я смогу работать над реализацией других алгоритмов наведения.
Спасибо за любую / всю помощь!