Unity 6.3
0 онлайн 91 гостей 3 в системе
Вход
GameObjects Шаг 7 из 56

Кватернионы и эйлеровские вращения в Unity

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

Как правило, вы вращаете объекты в вашей сцене с помощью компонента Transform, который отображает ориентацию в виде Эйлерова угла. Однако Unity хранит вращения и ориентации внутри как кватернионы, что может быть полезно для более сложных движений, которые в противном случае могут привести к блокировке гимбала.

Леворучная система координат

Оси левосторонней координатной системы Unity, показывающие, что направление вращения от положительной оси x к положительной оси y противоположно часовой стрелке, когда смотришь вдоль положительной оси z.
Оси левосторонней координатной системы Unity, показывающие, что направление вращения от положительной оси x к положительной оси y противоположно часовой стрелке, если смотреть вдоль положительной оси z.

Координатная система описывает положение объектов в трехмерном пространстве. Unity использует левостороннюю координатную систему: положительная ось x указывает направо, положительная ось y указывает вверх, а положительная ось z указывает вперед. Левосторонняя координатная система Unity означает, что направление вращения от положительной оси x к положительной оси y противоположно часовой стрелке, когда смотришь вдоль положительной оси z.

Эйлеровы углы

В координате Transform, Unity отображает вращение с векторным свойством Transform.eulerAngles X, Y и Z. В отличие от нормального вектора, эти значения фактически представляют угол (в градусах) вращения вокруг осей X, Y и Z.

Эйлеровское угловое вращение выполняет три отдельных вращения вокруг трех осей. Unity выполняет Эйлеровское вращение последовательно вокруг оси z, оси x, а затем оси y. Этот метод вращения является внешнее вращение; первоначальная система координат не изменяется во время вращения.

Чтобы повернуть GameObject, вы можете ввести значения углов, насколько вы хотите, чтобы каждая ось вращалась в компоненте Transform. Чтобы повернуть GameObjects с помощью скрипта, используйте Transform.eulerAngles. Если вы преобразуете в Эйлеровы углы для выполнения расчетов и вращения, вы рискуете проблемами с блокировкой гимбала.

Карманный замок

Когда объект в пространстве 3D теряет степень свободы и может вращаться только в пределах двух измерений, это называется блокировкой гимбала. Блокировка гимбала может произойти с Эйлеровыми углами, если две оси становятся параллельными. Если вы не преобразуете значения вращения в Эйлеровы углы в вашем сценарии, использование кватернионов должно предотвратить блокировку гимбала.

Если у вас есть проблемы с блокировкой гимбала, вы можете избежать Эйлеровых углов, если использовать Transform.RotateAround для вращения. Вы также можете использовать Quaternion.AngleAxis на каждой оси и умножать их вместе (кватернионное умножение применяет каждое вращение по очереди).

Кватернионы

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

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

Вы можете использовать кватернионы напрямую, если используете Класс Quaternion. Если вы задаёте повороты через скрипт, используйте класс Quaternion и его функции для создания и изменения значений поворота. Значения можно задавать в виде углов Эйлера, но хранить их нужно как кватернионы, чтобы избежать проблем.

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

Чтобы преобразовать между кватернионами и Эйлеровыми углами для просмотра и редактирования вращения по своему усмотрению, вы можете использовать скрипт:

  • Для преобразования из Эйлеровых углов в кватернионы можно использовать функцию Quaternion.Euler.
  • Чтобы преобразовать кватернион в Эйлеров угол, можно использовать функцию Quaternion.eulerAngles.

Дополнительные ресурсы