Unity использует Quaternionстандартный способ Unity для представления поворотов в виде данных. При написании кода, имеющего дело с поворотами, обычно следует использовать класс Quaternion и его методы. Подробнее
См. в классе Словарь для хранения трехмерной ориентации GameObjectsОсновной объект в сценах Unity, который может представлять персонажей, реквизит, декорации, камеры, путевые точки и многое другое. Функциональность GameObject определяется прикрепленными к нему компонентами. Подробнее
См. в Словарь, а также использовать их для описания относительного поворота от одного ориентация на другого.
На этой странице представлен обзор класса Quaternion и его частого использования при написании сценариев с его помощью. Исчерпывающую информацию о каждом члене класса Quaternion см. в справочнике по скрипту Quaternion.
Важно понимать разницу между углами Эйлера (значениями X, Y и Z, которые вы видите в инспекторе для поворота GameObject) и базовым значением Quaternion, которое Unity использует для хранения фактического поворота GameObjects. Основы этой темы см. в статье Вращение и ориентация в Unity.
При работе с поворотами в ваших скриптахфрагмент кода, который позволяет создавать собственные компоненты, запускающие игровые события , изменяйте свойства компонента с течением времени и реагируйте на ввод данных пользователем любым удобным для вас способом. Подробнее
См. в Словарь, вы должны использовать класс Quaternion и его функции для создания и изменить значения вращения. В некоторых ситуациях допустимо использование углов Эйлера, но вы должны помнить:
– Вам следует использовать функции класса Quaternion, которые имеют дело с углами Эйлера
- Получение, изменение и повторное применение значений Эйлера из поворота может привести к непреднамеренным побочным эффектам (см. ниже)
Непосредственное создание кватернионов и управление ими
Класс Quaternion в Unity имеет ряд функций, которые позволяют создавать повороты и управлять ими без использования углов Эйлера, и именно эти функции следует использовать в большинстве типичных случаев. Каждая из этих ссылок на Справочник по сценариям с примерами кода:
Создание поворотов:
Управление поворотами:
Класс Transform также предоставляет методы, позволяющие работать с поворотами кватерниона:
Работа с углами Эйлера
В некоторых случаях предпочтительнее использовать в сценариях углы Эйлера. При этом важно помнить, что вы должны хранить свои углы в переменных и использовать их только для применения их в качестве углов Эйлера к вашему повороту, который в конечном итоге все равно должен храниться как кватернион. Хотя можно получить углы Эйлера из кватерниона, при извлечении, изменении и повторном применении могут возникнуть проблемы.
Подробнее о том, как именно могут возникнуть эти проблемы, можно прочитать на справочной странице скриптов eulerAngles.
Вот несколько примеров ошибок, которые обычно делаются на гипотетическом примере попытки повернуть игровой объект вокруг оси X со скоростью 10 градусов в секунду. Вот чего следует избегать:
// rotation scripting mistake #1
// the mistake here is that we are modifying the x value of a quaternion
// this value does not represent an angle, and does not produce desired results
void Update ()
{
var rot = transform.rotation;
rot.x += Time.deltaTime * 10;
transform.rotation = rot;
}
// rotation scripting mistake #2
// Read, modify, then write the Euler values from a Quaternion.
// Because these values are calculated from a Quaternion,
// each new rotation might return very different Euler angles, which might suffer from gimbal lock.
void Update ()
{
var angles = transform.rotation.eulerAngles;
angles.x += Time.deltaTime * 10;
transform.rotation = Quaternion.Euler(angles);
}
А вот пример использования углов Эйлера в скрипте правильно:
// Rotation scripting with Euler angles correctly.
// Store the Euler angle in a class variable, and only use it to
// apply it as an Euler angle, but never rely on reading the Euler back.
float x;
void Update ()
{
x += Time.deltaTime * 10;
transform.rotation = Quaternion.Euler(x,0,0);
}
Дополнительную информацию см. на странице справочника по скрипту Quaternion.