В настоящее время я делаю свой PlayerController основанный на Rigidbody. Я делаю перемещение по наклонной поверхности, и в зависимости от наклона перемещаю не только по x и z, но и по y:
Вот мой код:
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 - локальное направление игрока.