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

Unity 3D中Quaternion.LookRotation旋转AI角色异常问题

问题排查与解决方案

核心原因分析

你的问题大概率由两个因素导致:

  • 模型轴向不匹配:Unity默认Quaternion.LookRotation是让物体的**Z轴(forward)**指向目标方向,但很多导入的3D模型可能将Y轴作为前向,或者导入时轴向设置错误,导致旋转逻辑和模型实际朝向错位。
  • 方向向量包含高度差:如果玩家和敌人存在Y轴高度差,target.position - transform.position会包含垂直方向分量,导致敌人不仅转向还会抬头/低头,贴近时这种垂直分量的影响被放大,出现“平躺”的异常姿态。

针对性修复方案

方案1:忽略垂直方向,仅在水平面朝向玩家

如果敌人不需要抬头/低头,只需在水平面朝向玩家,可先剔除方向向量的Y分量:

private void RotateToTarget()
{
    // 计算目标方向,剔除Y轴高度差
    Vector3 direction = target.position - transform.position;
    direction.y = 0; // 忽略垂直方向,保持水平朝向
    
    // 避免敌人与玩家位置完全重叠时报错
    if (direction.magnitude > 0.1f)
    {
        Quaternion rotation = Quaternion.LookRotation(direction, Vector3.up);
        transform.rotation = rotation;
    }
}

方案2:修正模型轴向匹配Unity坐标系

如果模型本身的前向不是Z轴(比如是Y轴),需调整旋转逻辑,让模型前向对齐目标方向:

private void RotateToTarget()
{
    Vector3 direction = target.position - transform.position;
    // 将模型实际前向轴替换为对应属性,比如Y轴用transform.up,X轴用transform.right
    Quaternion rotation = Quaternion.FromToRotation(transform.up, direction);
    transform.rotation = rotation;
}

方案3:利用NavMeshAgent自动旋转

你已使用NavMeshAgent,可直接开启其自动旋转功能,避免手动旋转逻辑冲突:

  • 在Inspector面板找到NavMeshAgent组件
  • 勾选Auto Rotation选项
  • 移除手动编写的RotateToTarget()方法,由Agent自动处理朝向

额外排查点

  • 检查模型导入设置:在Project窗口选中模型,查看Model标签下的Rotation参数,确保与Unity场景坐标系一致(通常为X:0, Y:0, Z:0)
  • 测试空物体替代:创建空GameObject,将敌人模型设为其子物体,给空物体挂载脚本,排查是否为模型自身轴心问题

内容的提问来源于stack exchange,提问作者Carteeeer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 21:03:29