TransformHandle.localEulerAngles
Declaration
public Vector3 localEulerAngles;Описание
Вращение как Эйлеров угол в градусах относительно вращения родительского преобразования.
Эйлеровы углы могут представлять трехмерное вращение, выполняя три отдельных вращения вокруг отдельных осей. В Unity эти вращения выполняются вокруг оси Z, оси X и оси Y, в этом порядке.
Вы можете установить вращение кватерниона, установив это свойство, и вы можете прочитать значения Эйлеровых углов, прочитав это свойство.
Когда вы задаёте поворот через свойство .eulerAngles, важно понимать: хотя вы описываете поворот значениями по осям X, Y и Z, именно эти значения в повороте не сохраняются. Вместо этого значения X, Y & Z преобразуются во внутренний формат Quaternion.
Когда вы читаете свойство .eulerAngles, Unity преобразует внутреннее представление поворота в Quaternion в углы Эйлера. Поскольку один и тот же поворот можно описать углами Эйлера несколькими способами, считанные значения могут заметно отличаться от тех, которые вы присваивали. Это может сбивать с толку, если вы пытаетесь постепенно наращивать значения для получения анимации.
Чтобы избежать подобных проблем, рекомендуемый способ работы с вращениями заключается в том, чтобы не полагаться на последовательные результаты при чтении .eulerAngles, особенно при попытке постепенно увеличивать вращение для создания анимации. Для лучших способов достижения этого, см. Оператор кватерниона *.
Следующий пример демонстрирует вращение GameObject с помощью eulerAngles на основе ввода пользователя. Пример показывает, что мы никогда не полагаемся на чтение Quanternion.eulerAngles для увеличения вращения, вместо этого мы устанавливаем его с помощью наших Vector3 currentEulerAngles. Все изменения вращения происходят в переменной currentEulerAngles, которые затем применяются к кватерниону, избегая проблемы, упомянутой выше.
using UnityEngine; public class ExampleScript : MonoBehaviour { float rotationSpeed = 45; Vector3 currentEulerAngles; float x; float y; float z;
void Update() { if (Input.GetKeyDown(KeyCode.X)) x = 1 - x; if (Input.GetKeyDown(KeyCode.Y)) y = 1 - y; if (Input.GetKeyDown(KeyCode.Z)) z = 1 - z;
//modifying the Vector3, based on input multiplied by speed and time currentEulerAngles += new Vector3(x, y, z) * Time.deltaTime * rotationSpeed;
//apply the change to the gameObject TransformHandle thisTransformHandle = transformHandle; thisTransformHandle.localEulerAngles = currentEulerAngles; }
void OnGUI() { GUIStyle style = new GUIStyle(); style.fontSize = 24; GUI.Label(new Rect(10, 0, 0, 0), "Rotating on X:" + x + " Y:" + y + " Z:" + z, style);
GUI.Label(new Rect(10, 50, 0, 0), "TransformHandle.localEulerAngle: " + transformHandle.localEulerAngles, style); } }
Unity автоматически преобразует углы в и из вращения, сохраненного в TransformHandle.localRotation.