Описание
Поворот в виде углов Эйлера в градусах относительно поворота родительского преобразования.
Углы Эйлера могут представлять трехмерное вращение путем выполнения трех отдельных вращений вокруг отдельных осей. В Unity эти вращения выполняются вокруг оси Z, оси X и оси Y в указанном порядке.
Вы можете установить вращение кватерниона, установив это свойство, и вы можете прочитать значения угла Эйлера, прочитав это свойство.
При использовании свойства .eulerAngles для установки поворота важно понимать, что хотя вы предоставляете значения поворота X, Y и Z для описания поворота, эти значения не сохраняются в повороте. Вместо этого значения X, Y и Z преобразуются во внутренний формат Quaternion.
Когда вы читаете значение свойства .eulerAngles, Unity преобразует внутреннее представление вращения кватерниона в углы Эйлера. Поскольку существует более одного способа представить любое заданное вращение с использованием углов Эйлера, значения, которые вы считываете, могут сильно отличаться от значений, которые вы присвоили. Это может вызвать путаницу, если вы пытаетесь постепенно увеличивать значения для создания анимации.
Чтобы избежать подобных проблем, рекомендуемый способ работы с поворотами – не полагаться на непротиворечивые результаты при чтении .eulerAngles, особенно при попытке постепенного увеличения поворота для создания анимации. Чтобы узнать о лучших способах достижения этого, см. оператор Quaternion *.
В следующем примере показано вращение 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
transform.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), "Transform.localEulerAngle: " + transform.localEulerAngles, style);
}
}
Unity автоматически преобразует углы в угол поворота, сохраненный в Transform.localRotation, и обратно.