Quaternion四元数实现绕y轴旋转90度报错求助
错误原因
Quaternion(四元数)的x/y/z/w分量并非直观的欧拉角度数,二者没有直接对应关系,直接修改四元数的y分量不符合其数学运算规则,会生成非法四元数,最终触发报错或不符合预期的旋转效果。
解决方案
以下是Unity引擎下绕Y轴旋转90度的正确实现:
场景1:在传入的rotation基础上叠加绕Y轴90度旋转
void getPosition(Quaternion rotation) { // 写法1:通过欧拉角中转修改,逻辑更直观 Vector3 euler = rotation.eulerAngles; euler.y += 90.0f; _rotateTarget.rotation = Quaternion.Euler(euler); // 写法2:四元数直接叠加,性能更优、稳定性更高 _rotateTarget.rotation = rotation * Quaternion.Euler(0, 90.0f, 0); }
场景2:不需要传入参数,直接让目标物体绕自身Y轴旋转90度
// 调用Transform内置方法,写法最简洁 _rotateTarget.Rotate(0, 90.0f, 0);
注意事项
- 四元数乘法的顺序不可随意调换,
rotation * Quaternion.Euler(0,90f,0)是在原有旋转的基础上叠加自身坐标系的Y轴旋转,调换顺序则为叠加世界坐标系的Y轴旋转,可按需调整。 - 除非你明确了解四元数的数学原理,否则不要直接修改四元数的x/y/z/w分量,所有旋转操作优先通过欧拉角中转或者四元数乘法、内置旋转方法完成。
内容的提问来源于stack exchange,提问作者whitebear
相关产品推荐
相关产品推荐

