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

群组 AI 与避让

群组 AI 完成。下一课整合导航与动画。

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

🎯本节学习目标

  • 实现互相避让
  • 实现目标分配
  • 实现队形

🚀课程导读

“一群敌人一起追你”——多个 Agent 要互相避让、目标分配。本课让 AI“成群”。

Agent 互相避让

不“叠罗汉”。

  1. 【默认避让】NavMeshAgent 自带避让:多个 agent 接近时自动绕开(基于 avoidancePriority 与半径)。
  2. 【属性】Agent 的 Radius 影响避让距离;Avoidance Priority 越小越优先(别人让 TA)。
  3. 【效果】两个 Agent 相向而行会互相让路。
  4. 【说明】避让是局部行为(本地决策),不与寻路冲突。
  5. 【调优】Radius 大→让得早但可能“堵路”;调整速度/优先级让队伍顺。
  6. 【观察】放 5 个 Agent 一起追目标,看避让是否自然。
  7. 【注意】避让不是万能的:狭窄通道会拥堵(用 RVO 或加大间隔,进阶)。
  8. 【完成】AI 会“让路”了!
💡
Agent 避让自带:Radius 定“让多早”、Priority 定“谁优先”。放一群就自动排队。

目标分配与队形

分工与合作。

  1. 【目标分配】一群敌人不都追同一个点(会挤):
  2. 给每个敌人偏移目标:
  3. Vector3 offset = Random.insideUnitCircle * 2f;
  4. agent.SetDestination(player.position + new Vector3(offset.x, 0, offset.y));
  5. 【按队列分配】玩家有几个队友,各分配一个(寻最近的)。
  6. 【队形】跟随者保持相对偏移(围绕队长):
  7. agent.SetDestination(leader.position + formationOffset);
  8. 【实现】给每个成员设自己的 formationOffset(菱形/直线/包围)。
  9. 【包围圈】敌人散开包围玩家(进阶:占位点系统)。
  10. 【简单可用】随机偏移 + 队形偏移即可做出“成群的 AI”。
  11. 【测试】5 个敌人不挤在一起、有散开感。
  12. 【完成】AI“成群结队”了!
  13. 【注意】目标偏移别太大(否则“不追玩家”的错觉)。
群组 AI = 默认避让 + 目标偏移(散开)+ 队形偏移(合作)。组合成“军团”。

常见错误与排查

错误:AI 挤成一团?
原因:没偏移或避让半径太小
解决:给目标加随机偏移;调大 Agent Radius;检查避让优先级。

动手练习

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

  • 观察多个 Agent 自动避让
  • 给敌人目标加偏移散开
  • 实现跟随队形

本节小结

群组 AI 完成。下一课整合导航与动画。

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

← 上一课AI 巡逻路径系统(Waypoint)