c# - Unity3d - eulerAngles(局部和全局)与检查器中的完全不同

标签 c# unity3d quaternions euler-angles

在游戏对象的检查器中,我使用的起始旋转是“-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/

相关文章:

c# - 使用itextsharp突出显示pdf中的单词,而不在浏览器中显示突出显示的单词

c# - 如何让 ODATA 序列化 NotMapped 属性

c# - Unity 的 Google Play 服务插件有一些错误

c++ - 使用 cv::Mat 的高效 C++ 四元数乘法

c# - 用户控件之间的WPF MVVM切换

c# - 类型来自 PropertyInfo.PropertyType 的通用类实例

c# - Kindle Fire 视频流式传输崩溃

android - 所有项目的 Unity gradle 构建均失败

c++ - 四元数到旋转矩阵,使用特征库的值不正确

math - 四元数 - YawPitchRoll 和 EulerAngles 之间的转换仅在 Pi 的间距时产生不正确的结果