@RandomProgrammer

Как рассчитать вектор движения?

В настоящее время я делаю свой PlayerController основанный на Rigidbody. Я делаю перемещение по наклонной поверхности, и в зависимости от наклона перемещаю не только по x и z, но и по y:
61d5968dd3094394677069.png
Вот мой код:
float groundAngle = (float)System.Math.Acos(Mathf.Clamp(groundNormal.y, -1, 1)) * 180 / (float)System.Math.PI;
rigidbody.AddRelativeForce((direction + Vector3.up * groundAngle / 45) * speed, mode);

Но такой способ подходит только если игрок движется ровно вверх в горку. Но он же может спускаться или идти вдоль наклонной поверхности. В общем я хочу рассчитать вектор движения, зная куда пойдёт игрок и нормаль поверхности.
P.S. direction - локальное направление игрока.
  • Вопрос задан
  • 580 просмотров
Решения вопроса 1
@RandomProgrammer Автор вопроса
С помощью Vector3.Dot можно рассчитать скалярное произведение между двумя векторами. Указываем для него направление движения и находим отклонение:
float diff = -Vector3.Dot(transform.TransformDirection(direction), normal);
rigidbody.AddRelativeForce((direction + Vector3.up * diff) * speed, mode);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы