解决报错Rotation quaternions must be unit length.

报错内容:Rotation quaternions must be unit length. UnityEngine.Rigidbody:MoveRotation (UnityEngine.Quaternion)

发生错误的代码片段:

rigid.MoveRotation(rigid.rotation*deltaRotation);//rigid.rotation*deltaRotation结果为 (0,0,0,0)

rigid.rotation=rigid.rotation*deltaRotation;//rigid.rotation*deltaRotation结果为 (0,0,0,0)

 

原因:

rigidbody的rotation变换不允许一个(0,0,0,0)的四维零向量对其赋值。这是不是很奇怪?为什么transform可以,rigidbody旋转就不行呢?这个暂且还不清楚。但是我们可以顺着这个思路往下提出解决方案。

解决方案:

为确保rigidbody旋转的同步问题,我们最好还是使用moveRotation对rotation进行变换。同步问题可见文章:Unity Rigidbody Position位置同步问题

代码如下:

            Quaternion endRotation=rigid.rotation*deltaRotation;
            if (rigid.rotation==Quaternion.identity)
            {
                transform.rotation=endRotation;
            }
            else
            {
                rigid.MoveRotation(rigid.rotation*deltaRotation);
            }

 

 

作者:Miracle
来源:麦瑞克博客
链接:https://www.unitymake.com/archives/unity/unity_technologyshare/2428
本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0许可协议,转载请注明!
THE END
分享
打赏
海报
解决报错Rotation quaternions must be unit length.
报错内容:Rotation quaternions must be unit length. UnityEngine.Rigidbody:MoveRotation (UnityEngine.Quaternion) 发生错误的代码片段: rigid.MoveRotat……
<<上一篇
下一篇>>
文章目录
关闭
目 录