Unity-使用欧拉角时避免万向节锁定

问题描述 投票:0回答:1

我希望使用eulerAngles将某个对象旋转到给定位置。它工作得很好且整洁,只是有时它会给我gimbal lock,这意味着它会以错误的方向旋转。我尝试使用Quaternions但无济于事,即使他们摆脱了我的万向节锁,他们也没有做应该做的事情。目标是旋转到给定的旋转。该代码我想怎么做:

    IEnumerator RotateTo_Euler(Transform whatToRotate,Vector3 toThis,float inTime)
{
    Vector3 idle = whatToRotate.eulerAngles;
    for (float t = 0.0f; canRotate && t < 1.0f; t += Time.deltaTime / inTime)
    {
        whatToRotate.eulerAngles = Vector3.Lerp(idle, toThis, t);
        yield return null;
    }
}

请注意,在我的情况下正在更改的z值永远不会为负,因此我不知道是什么原因导致万向节锁定。

c# unity3d rotation euler-angles
1个回答
0
投票

四元数是要走的路。它们是“适当的”旋转,使您可以旋转进行所有操作。值得花一些时间学习四元数的基本概念和有用的计算。

我建议您编写可行的转换euler>四元数,四元数> euler,然后将其作为四元数进行旋转。

(有Quaternion.Lerp的工作原理类似于您的代码示例)

© www.soinside.com 2019 - 2024. All rights reserved.