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

时间:2017-01-26 17:05:04

标签: c# unity3d rotation euler-angles

我希望使用eulerAngles将某个对象旋转到给定位置。它工作得很好而且整洁,除了有时它给了我一个万向节锁,这意味着它在错误的方向上旋转。我尝试使用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值在我的情况下会发生变化,永远不会消极,所以我不知道导致万向节锁定的原因。

1 个答案:

答案 0 :(得分:0)

四元数是必经之路。它们是“适当的”旋转,使您可以旋转来做所有事情。值得花一些时间学习四元数的基本概念和有用的计算。

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

(有Quaternion.Lerp,它的工作方式类似于您的代码示例)