Unity3d – eulerAngles(本地和全球)与检查员完全不同

在gameObject的检查器中我使用的起始旋转是“-90”,但是当我运行print(transform.eulerAngles.x)我得到270(同样是transform.localEulerAngles.x )。

如果我向下倾斜gameObject ,检查器X值会变大(例如,到-85)。 打印的transform.eulerAngles.x也变大了,比如274。

事情变得奇怪:

如果我向上倾斜gameObject ,检查器x坐标会变小(例如,到-95),但应该是,但是打印的eulerAngle.x值变得eulerAngle.x (这里是274)。 因此,如果我从eulerAngle.x为270向上或向下旋转对象,则x值会增加。

我肯定在这里做错了,但经过大量的故障排除后我仍然无法弄清楚是什么。 有什么想法吗?

eulerAngles是Unity3D中一个复杂的过程。 您永远不应在检查器中或通过代码递增/递减或设置值。 应该只使用绝对值来读取和设置它。

不要递增或递减值,因为当角度超过360度时它会失败。 Transform.Rotate是您使用的。

以下是Unity3D文档示例中的示例代码:

 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); } } 

这可以直接从文档中获取: https : //docs.unity3d.com/ScriptReference/Transform-eulerAngles.html

还有Transform.Rotate文档: https : //docs.unity3d.com/ScriptReference/Transform.Rotate.html

当你记录它时,检查员几乎总会给你一个时髦的价值。 您将获得的唯一一致性是print(transform.rotation)。 这应该在检查员和代码中保留类似的值。

对于transform.eulerAnglestransform.localEulerAngles每个值,如果它有父项: –

 if (value > 270) value =- 360; 
Interesting Posts