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

Описание

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

Transform.eulerAngles представляет вращение в мировом пространстве. При просмотре поворота GameObject в Инспекторе вы можете увидеть значения угла, отличные от тех, которые хранятся в этом свойстве. Это связано с тем, что инспектор отображает локальное вращение. Дополнительные сведения см. в разделе Transform.localEulerAngles.

Углы Эйлера могут представлять трехмерное вращение путем выполнения трех отдельных вращений вокруг отдельных осей. В 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.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), "Transform.eulerAngle: " + transform.eulerAngles, style); } }

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

Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
API скрипты 2021.3