【发布时间】:2017-01-06 05:44:07
【问题描述】:
我对一些与欧拉角有关的 Unity 文档感到有些困惑。我只是想知道我是否不了解差异,或者示例不遵循最佳实践。文档here 状态:
仅使用此变量来读取角度并将其设置为绝对值。不要增加它们,因为当角度超过 360 度时它会失败。请改用 Transform.Rotate。
同时,代码示例似乎使用了可能超过 360 度的增量:
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
public float yRotation = 5.0F;
void Update() {
yRotation += Input.GetAxis("Horizontal");
transform.eulerAngles = new Vector3(10, yRotation, 0);
}
void Example() {
print(transform.eulerAngles.x);
print(transform.eulerAngles.y);
print(transform.eulerAngles.z);
}
}
如果变量超过 360 度,增加变量然后使用该变量设置值绝对仍然存在超过 360 度的风险吗?
【问题讨论】:
-
我认为该示例是一种特殊情况,可以安全地使 y 无限增加,因为 y 是唯一定期更改的轴,而 x 和 z 保持不变。如果所有轴都可能是可修改的,那么当你的欧拉在 360 处交换时,增加 y 可能会导致问题。你甚至可能进入万向节锁定状态。我想这就是推荐使用 Transform.Rotate 的原因。