Поиск…


Синтаксис

  • Quaternion.LookRotation (Vector3 forward [, Vector3 вверх]);
  • Quaternion.AngleAxis (поплавковые углы, ось VectorOfRotation);
  • float angleBetween = Quaternion.Angle (Quaternion rotation1, Quaternion rotation2);

Вступление к Quaternion vs Euler

Угол Эйлера - это «углы градуса», такие как 90, 180, 45, 30 градусов. Кватернионы отличаются от углов Эйлера тем, что они представляют точку на единичной сфере (радиус равен 1 единице). Вы можете представить эту сферу как трехмерную версию окружности Единицы, которую вы изучаете в тригонометрии. Кватернионы отличаются от углов Эйлера тем, что они используют мнимые числа для определения 3D-вращения.

Хотя это может показаться сложным (и, возможно, это так), Unity имеет большие встроенные функции, которые позволяют переключаться между углами Эйлера и кватерами, а также функции для изменения кватернионов, не зная ни одной вещи о математике позади них.

Преобразование между Эйлером и Кватернионом

// Create a quaternion that represents 30 degrees about X, 10 degrees about Y
Quaternion rotation = Quaternion.Euler(30, 10, 0);

// Using a Vector
Vector3 EulerRotation = new Vector3(30, 10, 0);
Quaternion rotation = Quaternion.Euler(EulerRotation);

// Convert a transfroms Quaternion angles to Euler angles
Quaternion quaternionAngles = transform.rotation;
Vector3 eulerAngles = quaternionAngles.eulerAngles;

Зачем использовать кватернион?

Кватернионы решают проблему, известную как фиксация карданного вала. Это происходит, когда первичная ось вращения становится коллинеарной с третичной осью вращения. Вот наглядный пример @ 2:09

Ротация вращения кватерниона

Quaternion.LookRotation(Vector3 forward [, Vector3 up]) создаст поворот кватерниона, который смотрит вперед «вниз» вперед и имеет ось Y, выровненную с вектором «вверх». Если вектор вверх не указан, будет использоваться Vector3.up.

Поверните этот игровой объект, чтобы посмотреть на целевой объект игры

// Find a game object in the scene named Target
public Transform target = GameObject.Find("Target").GetComponent<Transform>();

// We subtract our position from the target position to create a
// Vector that points from our position to the target position
// If we reverse the order, our rotation would be 180 degrees off.
Vector3 lookVector = target.position - transform.position;
Quaternion rotation = Quaternion.LookRotation(lookVector);
transform.rotation = rotation;


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow