我希望使用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
值在我的情况下会发生变化,永远不会消极,所以我不知道导致万向节锁定的原因。
答案 0 :(得分:0)
四元数是必经之路。它们是“适当的”旋转,使您可以旋转来做所有事情。值得花一些时间学习四元数的基本概念和有用的计算。
我建议您编写可行的转换euler>四元数,四元数> euler,然后将其作为四元数进行旋转。
(有Quaternion.Lerp,它的工作方式类似于您的代码示例)