首页/ 第 15 章 · 寻路与导航/ 第 252 课
LESSON 252 · 寻路与导航

NavMeshAgent 详解

NavMeshAgent 已掌握。下一课学 NavMesh 烘焙设置。

⏱ 约 14 分钟📊 难度:入门🗂 第 15 章 · 寻路与导航📍 第 252 / 300 课
课程进度
252 / 300

🎯本节学习目标

  • 掌握 Agent 属性
  • 掌握移动控制
  • 掌握状态判断

🚀课程导读

NavMeshAgent 是“会走路的代理”。本课把它从上到下讲透。

Agent 核心属性

走路“配置”。

  1. 【添加】角色加 NavMeshAgent 组件。
  2. 【属性】
  3. Speed:移动速度。
  4. Angular Speed:转身速度。
  5. Acceleration:加速。
  6. Stopping Distance:到达目标后停下的距离(攻击距离用)。
  7. Auto Braking:自动刹车(靠近减速)。
  8. Radius / Height:代理体积(碰撞用)。
  9. 【移动】agent.SetDestination(target.position); // 每帧或目标变化时设置
  10. 【清除】agent.ResetPath(); // 停止当前路径
  11. 【停走】agent.isStopped = true/false;
  12. 【避开】agent.avoidancePriority 避障优先级(数字小优先)。
  13. 【注意】Agent 移动由它自己控制,别同时改 transform 位置(会冲突)。
  14. 【完成】Agent 能“走”了!
💡
Agent 四调节:Speed 速度、StoppingDistance 停距、Radius 体积、AngularSpeed 转向。

状态与路径判断

agent 现在在干嘛。

  1. 【到达判断】agent.remainingDistance <= agent.stoppingDistance 且 !agent.pathPending 视为到达。
  2. 【示例】敌人到达攻击距离才攻击:
  3. if (agent.remainingDistance <= agent.stoppingDistance && !agent.pathPending) { Attack(); }
  4. 【是否在走】agent.velocity.magnitude > 0.1f 驱动走路动画(第 229 课)。
  5. 【路径状态】agent.pathStatus:PathComplete(到达)、PathInvalid(无效)。
  6. 【路径待定】agent.pathPending:正在计算路径(刚设目标时短暂 true)。
  7. 【计算失败】目标不可达:agent.hasPath = false;检测用 agent.pathStatus。
  8. 【自定义目标】SetDestination 每帧调用没问题(内部去重)。
  9. 【演示】给角色设一个目标点,观察 remainingDistance 变化。
  10. 【注意】刚设目标的一两帧 remainingDistance 可能不准(等 pathPending 结束)。
  11. 【完成】Agent 状态“看得懂”了!
Agent 三问:到没到(remainingDistance)、走没走(velocity)、行不行(pathStatus)。

常见错误与排查

错误:Agent 不动?
原因:没设目标、或不在网格、或 isStopped
解决:确认 SetDestination 被调用且目标可达;Agent 在 NavMesh 上;isStopped=false。

动手练习

课后小任务(做出来才算真的学会)

  • 调 Agent 速度/停距/半径
  • 实现到达判定
  • 用 velocity 驱动动画

本节小结

NavMeshAgent 已掌握。下一课学 NavMesh 烘焙设置。

完成打卡后,主站会实时更新你的学习进度 🎯

← 上一课寻路与导航入门