在游戏对象的检查器中,我使用的起始旋转是“-90”,但是当我运行 print(transform.eulerAngles.x)
时,我得到 270(同上 transform.localEulerAngles.x
).
如果我将 gameObject
向下倾斜,检查器的 X 值会变大(比如,到 -85),因为它应该如此。打印出来的 transform.eulerAngles.x
也变大了,比如 274。
这里是事情变得奇怪的地方:
如果我将 gameObject
向上倾斜,检查器 x 坐标会变小(例如,到 -95),这是应该的,但是打印的 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)。这应该在检查器和代码中保留相似的值。
关于c# - Unity3d - eulerAngles(局部和全局)与检查器中的完全不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38509472/