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