Unity 6.3
0 онлайн 77 гостей 3 в системе
Вход

TransformHandle.eulerAngles

Declaration

public Vector3 eulerAngles;

Описание

Вращение как Эйлеров угол в градусах.

TransformHandle.eulerAngles представляет вращение в мировом пространстве. При просмотре вращения GameObject в Inspector, вы можете увидеть другие значения угла, чем те, которые хранятся в этом свойстве. Это потому, что Inspector отображает локальное вращение, для более подробной информации см. TransformHandle.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.eulerAngles = 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, 25, 0, 0), "transformHandle.eulerAngle: " + transformHandle.eulerAngles, style); } }

Не устанавливайте одну из осей eulerAngles отдельно (например, eulerAngles.x = 10; ), так как это приведет к дрейфу и нежелательным вращениям. При установке их на новое значение устанавливайте их все одновременно, как показано выше. Unity преобразует углы в и из вращения, хранящегося в TransformHandle.rotation.

Углы выражаются модулем 360 градусов. Например, указание 1, 361, или -17999 приводит к тому же углу, как показано в предыдущем примере, где currentEulerAngles увеличивается со временем после 360 для x, y, и z.