У меня есть персонаж, движущийся по поверхности с вектором тангенса / вперед F c .Персонаж движется с постоянной скоростью относительно сплайна с вектором вперед F s .
Чтобы избежать перемещения персонажа с поверхности (и потери его «заземленного» состояния контроллера персонажа), яхочу перемещать его по касательной (F c ), но все еще с постоянной скоростью вдоль F s .
Я знаю, что легко получить любое движениевектор F m (Fm в примере кода) к вектору, перемещенному относительно сплайна (F s ), проецируя F m на касательную к сплайну(T s ) как это:
Fs = Vector3.Project(Fm, Ts);
Но в моем случае у меня есть значение F s и я хочу вычислить F m ,Но я не могу найти способ сделать это:
Fm = Vector3.InverseProject(Fs, Tc);
Где Tc - тангенс поверхности, по которой движется персонаж.Другими словами, я хочу найти F m , такой, чтобы проекция F m на прямой вектор сплайна была бы F s (указанной длины).Это необходимо, чтобы гарантировать, что прогрессирование вдоль сплайна и, следовательно, по всему миру происходит с постоянной скоростью, независимо от того, движется ли персонаж вверх или вниз по «холмам».
Я сделал (довольно плохо)Иллюстрация: