我希望使用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
值永远不会为负,因此我不知道是什么原因导致万向节锁定。
四元数是要走的路。它们是“适当的”旋转,使您可以旋转进行所有操作。值得花一些时间学习四元数的基本概念和有用的计算。
我建议您编写可行的转换euler>四元数,四元数> euler,然后将其作为四元数进行旋转。
(有Quaternion.Lerp的工作原理类似于您的代码示例)