Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты
public Vector3 eulerAngles;

Описание

Возвращает или задает представление угла Эйлера для поворота.

Углы Эйлера могут представлять трехмерное вращение путем выполнения трех отдельных вращений вокруг отдельных осей. В 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; Quaternion currentRotation; 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; //moving the value of the Vector3 into Quanternion.eulerAngle format currentRotation.eulerAngles = currentEulerAngles; //apply the Quaternion.eulerAngles change to the gameObject transform.rotation = currentRotation; } void OnGUI() { GUIStyle style = new GUIStyle(); style.fontSize = 24; // Use eulerAngles to show the euler angles of the quaternion stored in Transform.Rotation GUI.Label(new Rect(10, 0, 0, 0), "Rotating on X:" + x + " Y:" + y + " Z:" + z, style); //outputs the Quanternion.eulerAngles value GUI.Label(new Rect(10, 25, 0, 0), "CurrentEulerAngles: " + currentEulerAngles, style); //outputs the transform.eulerAngles of the GameObjectGUI.Label(new Rect(10, 50, 0, 0), "GameObject World Euler Angles: " + transform.eulerAngles, style); } }

В следующем примере показано, как значения, которые вы считываете из .eulerAngles, могут сильно отличаться от назначенных вами значений, даже если они представляют один и тот же поворот.

using UnityEngine; // демонстрация того, что eulerAngles не возвращает те же значения, что и назначенные public class EulerAnglesProblemExample : MonoBehaviour { private void Start() { Quaternion myRotation = Quaternion.identity; myRotation.eulerAngles = new Vector3(150, 35, 45); Debug.Log(myRotation.eulerAngles); // output is: (30.0, 215.0, 225.0) } }
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
API скрипты 2021.3