Вычислить инверсию Vector3.Project в проекте Unity C # - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть персонаж, движущийся по поверхности с вектором тангенса / вперед 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 (указанной длины).Это необходимо, чтобы гарантировать, что прогрессирование вдоль сплайна и, следовательно, по всему миру происходит с постоянной скоростью, независимо от того, движется ли персонаж вверх или вниз по «холмам».

Я сделал (довольно плохо)Иллюстрация:

Character movement on surface

...