Вращения в 3D-приложениях обычно представляются одним из двух способов: кватернионами или углами Эйлера. Каждый из них имеет свои особенности использования и недостатки. Unity использует кватернионы внутри, но показывает значения эквивалентных углов Эйлера в Inspectorокне Unity, в котором отображается информация о выбранном в данный момент GameObject , настройки объекта или проекта, что позволяет просматривать и редактировать значения. Дополнительная информация
См. Словарь, чтобы упростить редактирование.
Углы Эйлера и кватернионы
Углы Эйлера
Углы Эйлера представлены тремя значениями угла для X, Y и Z, которые применяются последовательно. Чтобы применить поворот Эйлера к конкретному GameObjectфундаментальному объекту в сценах Unity, который может представлять персонажей, реквизит, декорации, камеры, путевые точки и многое другое. Функциональность GameObject определяется прикрепленными к нему компонентами. Подробнее
См. в Словарь, каждое значение поворота применяется по очереди, как поворот вокруг соответствующей оси.
- Преимущество: углы Эйлера имеют интуитивно понятный «удобочитаемый» формат, состоящий из трех углов.
- Преимущество: углы Эйлера могут представлять поворот из одной ориентации в другую посредством поворота более чем на 180 градусов.
- Ограничение: углы Эйлера страдают от Gimbal Lock. При применении трех вращений по очереди первое или второе вращение может привести к тому, что третья ось будет указывать в том же направлении, что и одна из предыдущих осей. Это означает, что была потеряна «степень свободы», поскольку третье значение поворота не может быть применено вокруг уникальной оси.
Кватернионы
Кватернионы можно использовать для представления ориентации или поворота игрового объекта. Это представление внутренне состоит из четырех чисел (обозначаемых в Unity как x, y, z и w), однако эти числа не представляют углы или оси, и обычно вам никогда не требуется прямой доступ к ним. Если вы не особенно заинтересованы в углублении математики кватернионов, вам действительно нужно знать только то, что Кватернион представляет собой вращение в трехмерном пространстве, и обычно вам не нужно знать или изменять свойства x, y и z.
Точно так же, как вектор может представлять либо положение, либо направление (где направление измеряется от начала координат), кватернион может представлять либо ориентацию, либо вращение, где вращение измеряется от «начала вращения». " или "Идентификация". Именно из-за того, что поворот измеряется таким образом — от одной ориентации к другой, — кватернион не может представлять поворот более чем на 180 градусов.
- Преимущество: вращение кватерниона не зависит от Gimbal Lock.
- Ограничение: один кватернион не может представлять поворот, превышающий 180 градусов в любом направлении.
- Ограничение: числовое представление кватерниона интуитивно непонятно.
Unity хранит все повороты GameObject внутри как кватернионы, потому что преимущества перевешивают ограничения.
Инспектор преобразования отображает вращение с использованием углов Эйлера, так как это легче понять и изменить. Unity преобразует новые значения в Инспекторе для вращения GameObject в новое значение вращения Quaternion для GameObject.

В качестве побочного эффекта в Инспекторе можно ввести значение, скажем, X: 0, Y: 365, Z: 0 для вращения игрового объекта. Это значение невозможно представить в виде кватерниона, поэтому при входе в режим воспроизведения значения поворота игрового объекта меняются на X: 0, Y: 5, Z: 0. Это связано с тем, что Unity преобразует вращение в кватернион, который не имеет концепции полного поворота на 360 градусов плюс 5 градусов, а вместо этого настроен на то же направление, что и результат вращения.
Чтобы узнать больше о написании сценариев с помощью класса Quaternion, см. страницу Руководства пользователя Quaternion и Сценарии Quaternion. Ссылка
Последствия для анимации
Многие пакеты для разработки трехмерных изображений и собственное внутреннее окно анимации Unity позволяют использовать углы Эйлера для указания поворотов во время анимации.
Эти значения вращения часто могут превышать диапазоны, выражаемые кватернионами. Например, если GameObject поворачивается на 720 градусов, это может быть представлено углами Эйлера X: 0, Y: 720, Z: 0. Но это не может быть представлено значением кватерниона.
Окно анимации Unity
В собственном окне анимации Unity есть параметры, позволяющие указать, как следует интерполировать вращение — с помощью интерполяции Quaternion или Euler. Указав интерполяцию Эйлера, вы сообщаете Unity, что вам нужен полный диапазон движения, определяемый углами. Однако с вращением кватерниона вы говорите, что просто хотите, чтобы вращение заканчивалось в определенной ориентации, а Unity использует интерполяцию кватерниона и вращается по кратчайшему расстоянию, чтобы добраться туда. Дополнительную информацию об этом см. в разделе Использование кривых анимации.
Внешние источники анимации
При импорте анимации из внешних источников эти файлы обычно содержат поворотный ключевой кадркадр, отмечающий начальную или конечную точку анимации. переход в анимации. Кадры между ключевыми кадрами называются промежуточными.
См. в Словарь анимацию в формате Эйлера. Поведение Unity по умолчанию заключается в повторной выборке этих анимаций и создании нового ключевого кадра Quaternion для каждого кадра в анимации, чтобы избежать любых ситуаций, когда поворот между ключевыми кадрами может превышать допустимый диапазон Quaternion.
Например, представьте себе два ключевых кадра, отстоящих друг от друга на 6 кадров, со значениями X, равными 0 в первом ключевом кадре и 270 во втором ключевом кадре. Без передискретизации кватернионная интерполяция между этими двумя ключевыми кадрами будет поворачиваться на 90 градусов в противоположном направлении, потому что это кратчайший путь перехода от первой ориентации ко второй ориентации. Однако благодаря передискретизации и добавлению ключевого кадра в каждый кадр угол между ключевыми кадрами теперь составляет всего 45 градусов, поэтому поворот работает правильно.
Все еще бывают ситуации, когда даже с повторной выборкой кватернионное представление импортированной анимации может недостаточно точно соответствовать оригиналу. По этой причине в Unity 5.3 и более поздних версиях есть возможность отключить повторную выборку анимации, чтобы вместо этого вы можете использовать исходные ключевые кадры анимации Эйлера во время выполнения. Дополнительную информацию см. в разделе Импорт анимации поворотов кривой Эйлера.