概述
- 移动扩展包
- 包含了 17 个移动相关的 Tasks
- 其中的聚集(flock)、跟随领队(leader follow)、队列(queue),展示了如何通过行为树实现控制多个 AI,可作为学习案例
- 支持的寻路方案:Unity NavMesh(默认)、A* Pathfinding Project、Poly Nav
- 行为树并不控制 Agent 的移动,而是设置目的地,由寻路驱动 Agent 转向和移动
每个 task 都有详细的描述,功能通用简洁,可以很容易地融入你的项目
包含 Tasks
向前移动 Move Towards
- 向前旋转 Rotate Towards ???
- 寻找 Seek
- 逃跑 Flee
- 追赶 Pursue
- 规避 Evade
- 跟随 Follow
- 巡逻 Patrol
- 掩护 Cover
- 闲逛 Wander
- 搜寻 Search
- 范围内 Within Distance
- 看到对象 Can See Object
- 听到对象 Can Hear Object
- 聚集 Flock
- 跟随头领 Leader Follow
- 队列 Queue
常见问题
Q1:为什么 agent 在目的地周围摆动?
A:NavMeshAgent 的 Stopping Distance 参数配置得太小了,一般 0.1。
Q2:为什么 Can See Object 检测不到目标对象?
A:Can See Object task 以 agent 对象的中心坐标为起点,以目标对象的中心坐标为终点,发送一条射线。如果中心坐标低于地面碰撞体,Can See Object task 就会返回 failure。此时可通过增加 Can See Object task 的 Ofsset 参数和 Target Offset 参数的 y 值解决这个问题。
Can See Object task 有个 Draw Debug Ray 可勾选参数,勾选后,检测射线会变得可视化,并且考虑到了 offset 值。射线的不同颜色,反映了不同的状态:
- Magenta:目标太远
- Red:目标不在视野内
- Yellow:有其他对象挡住了目标
- Green:目标被看到
Q3:该扩展在 3D 空间中是否起作用?
A:3D 空间寻路计算量非常大,目前还没有可用的方案,但是有些变通方法:
- 在空中铺设透明的路
- 在某些寻路实现中,比如 Unity NavMesh,支持调整 Agent 的高度偏移,可以近似实现空中移动
- 不使用寻路,使用有局部避障(local avoidance)功能的控制行为,需要自己实现,该扩展包中未包含