Поворот направления на угол в Unity: Quaternion.Euler, Quaternion.AngleAxis, Vector3.RotateTowards и Matrix4x4

Чтобы повернуть направление в Unity на заданный угол, вы можете использовать различные методы. Вот несколько подходов, которые вы можете рассмотреть:

  1. Использование Quaternion.Euler: Unity предоставляет функцию Quaternion.Euler, которая позволяет создавать поворот на основе углов Эйлера. Вы можете использовать эту функцию для создания кватерниона, представляющего желаемое вращение, а затем применить его к вектору направления с помощью умножения кватернионов.

Пример кода:

Vector3 direction = new Vector3(1, 0, 0); // The original direction vector
float angle = 45.0f; // The rotation angle in degrees
Quaternion rotation = Quaternion.Euler(0, angle, 0); // Create a rotation Quaternion
Vector3 rotatedDirection = rotation * direction; // Apply the rotation to the direction vector
  1. Использование Quaternion.AngleAxis. Другой метод — использовать функцию Quaternion.AngleAxis, которая создает кватернион вращения на основе угла и оси вращения. Вы можете указать ось вращения как вектор вверх (например, Vector3.up) или любую другую желаемую ось.

Пример кода:

Vector3 direction = new Vector3(1, 0, 0);
float angle = 45.0f;
Quaternion rotation = Quaternion.AngleAxis(angle, Vector3.up);
Vector3 rotatedDirection = rotation * direction;
  1. Использование Vector3.RotateTowards. Если вы хотите постепенно менять направление с течением времени или на основе определенной скорости, вы можете использовать функцию Vector3.RotateTowards. Этот метод поворачивает один вектор относительно другого на угол, указанный в градусах.

Пример кода:

Vector3 direction = new Vector3(1, 0, 0);
Vector3 targetDirection = new Vector3(0, 1, 0);
float maxAngle = 45.0f; // The maximum angle in degrees
Vector3 rotatedDirection = Vector3.RotateTowards(direction, targetDirection, maxAngle * Mathf.Deg2Rad, 0);
  1. Использование Matrix4x4: вы также можете использовать матрицы преобразования для поворота векторов. В Unity вы можете создать матрицу вращения с помощью функции Matrix4x4.Rotate, а затем умножить ее на вектор направления.

Пример кода:

Vector3 direction = new Vector3(1, 0, 0);
float angle = 45.0f;
Matrix4x4 rotationMatrix = Matrix4x4.Rotate(Quaternion.Euler(0, angle, 0));
Vector3 rotatedDirection = rotationMatrix.MultiplyVector(direction);