Unity3d - eulerAngles(本地和全球)与检查员

时间:2016-07-21 16:21:29

标签: c# unity3d quaternions euler-angles

在gameObject的检查器中,我使用起始旋转是" -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值。

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

2 个答案:

答案 0 :(得分:2)

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

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

以下是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)。这应该在检查员和代码中保留类似的值。

答案 1 :(得分:0)

表示transform.eulerAnglestransform.localEulerAngles中的每个值,如果它有父级: -

if (value > 270)
    value =- 360;