You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 11:21:01