如何匹配另一物体的旋转增量 四元数旋转方向反向问题如何修复
旋转方向反向问题修复方案
问题根源
当前代码的四元数运算顺序错误,计算得到的是A从当前状态回到初始状态的反向旋转增量,因此物体B的旋转方向会和A相反。
修复方法
调整四元数的计算顺序,先计算A从初始姿态到当前姿态的正向旋转增量,再将该增量叠加到B的初始旋转上即可,修复后的代码如下:
// 计算A从初始旋转到当前旋转的正向增量 Quaternion rotationDelta = objectA.transform.localRotation * Quaternion.Inverse(initialObjectARotation); // 将增量叠加到B的初始旋转上,得到B当前应有的旋转 objectB.transform.localRotation = rotationDelta * initialObjectBRotation;
如果需要合并为一行写法,可直接使用如下代码:
objectB.transform.localRotation = (objectA.transform.localRotation * Quaternion.Inverse(initialObjectARotation)) * initialObjectBRotation;
补充说明
如果同步需求是基于世界坐标系的旋转而非局部坐标系,把代码中的localRotation替换为rotation即可。
内容的提问来源于stack exchange,提问作者Wojtek Wencel
相关产品推荐
相关产品推荐

