版本: Unity 6 (6000.0)
语言英语
  • C#

Transform.eulerAngles

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交,但我们确实会阅读用户提出的每一项更改建议,并在适用时进行更新。

关闭

提交失败

由于某些原因,您的更改建议无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

切换到手册
public Vector3 eulerAngles;

描述

以度为单位的欧拉角表示的旋转。

Transform.eulerAngles 表示世界空间中的旋转。在检查器中查看 GameObject 的旋转时,您可能会看到与此属性中存储的角度值不同的值。这是因为检查器显示的是局部旋转,有关更多信息,请参阅 Transform.localEulerAngles

欧拉角可以通过围绕各个轴进行三次单独旋转来表示三维旋转。在 Unity 中,这些旋转依次围绕 Z 轴、X 轴和 Y 轴进行。

您可以通过设置此属性来设置四元数的旋转,并且可以通过读取此属性来读取欧拉角值。

当使用 .eulerAngles 属性设置旋转时,务必理解,尽管您提供了 X、Y 和 Z 旋转值来描述您的旋转,但这些值不会存储在旋转中。相反,X、Y 和 Z 值将转换为四元数的内部格式。

当您读取 .eulerAngles 属性时,Unity 会将四元数的内部旋转表示转换为欧拉角。因为,使用欧拉角表示任何给定旋转的方法不止一种,所以您读取的值可能与您分配的值大不相同。如果您尝试逐渐增加这些值以生成动画,这可能会造成混淆。

为了避免此类问题,建议在处理旋转时避免依赖于读取 .eulerAngles 时的一致结果,尤其是在尝试逐渐增加旋转以生成动画时。有关实现此目的的更好方法,请参阅 Quaternion * 运算符

以下示例演示了根据用户输入使用 eulerAngles 旋转 GameObject。该示例表明我们从不依赖于读取 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 中存储的旋转与角度之间进行转换。