【问题标题】:Unity3d - eulerAngles (local and global) totally different than what's in inspectorUnity3d - eulerAngles(本地和全局)与检查器中的完全不同
【发布时间】:2023-03-24 20:51:01
【问题描述】:

在游戏对象的检查器中,我使用的起始旋转是“-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 值无论如何都会增加。

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

【问题讨论】:

  • 游戏对象是另一个游戏对象的子对象吗?
  • 不,不是。 ://
  • 统一文档中反复解释。 简单地使用“旋转”。就是这么简单。
  • 尝试使用“旋转”并担心它不是那么简单......这也不起作用......

标签: c# unity3d quaternions euler-angles


【解决方案1】:

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)。这应该在检查器和代码中保留相似的值。

【讨论】:

  • 我已阅读文档。我没有增加或减少值,只是读取它们。编辑:另外,关于 print(transform.rotation) 的部分是不正确的。 transform 是一个四元数,因此打印它只会给您 x,y,z,w 四元数值,而不是 eulerAngles。
  • 尝试记录 transform.rotation.eulerAngles.x。很想看看输出。
  • transform.rotation.eulerAngles.x 和 transform.eulerAngles.x 的输出相同,localEulerAngles.x 也是如此
  • 我想知道打印的 eulerAngle.x 值是否使用了与检查器不同的空间。
  • 我有一个有趣的事情要尝试。也许将您的变换的 eulerangle 保存在具有公共范围的 Vector3 变量中,以便您可以在检查器中看到它。在 Update() 中输出 var 以跟踪它,并在检查器中查看它们是否相关。
【解决方案2】:

对于transform.eulerAnglestransform.localEulerAngles 中的每个值(如果它有父级):

if (value > 270)
    value -= 360;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多