最简单的寻路系统
介绍
步骤
- 将地面或者障碍物标记为static
- 打开Navigation窗口并对导航场景进行烘培
- 给需要寻路的物体加入NavMeshAgent组件
- 编写寻路脚本:
NavMeshAgent组件
组件中各个变量说明详见官方文档:https://docs.unity3d.com/Manual/class-NavMeshAgent.html
属性 |
功能 |
Agent Size |
代理器的大小 |
Radius |
代理的半径,用于计算障碍物与其他代理之间的碰撞。 |
Height |
代理通过头顶障碍物时所需的高度间隙。 |
Base offset |
碰撞圆柱体相对于变换轴心点的偏移。 |
Steering |
操作 |
Speed |
最大移动速度(以世界单位/秒表示)。 |
Angular Speed |
最大旋转速度(度/秒)。 |
Acceleration |
最大加速度(以世界单位/平方秒表示)。 |
Stopping distance |
当靠近目标位置的距离达到此值时,代理将停止。 |
Auto Braking |
启用此属性后,代理在到达目标时将减速。对于巡逻等行为(这种情况下,代理应在多个点之间平滑移动)应禁用此属性 |
Obstacle Avoidance |
避障 |
Quality |
障碍躲避质量。如果拥有大量代理,则可以通过降低障碍躲避质量来节省 CPU 时间。如果将躲避设置为无,则只会解析碰撞,而不会尝试主动躲避其他代理和障碍物。 |
Priority |
执行避障时,此代理将忽略优先级较低的代理。该值应在 0–99 范围内,其中较低的数字表示较高的优先级。 |
Path Finding |
路径查找 |
Auto Traverse OffMesh Link |
设置为 true 可自动遍历网格外链接 (Off-Mesh Link)。如果要使用动画或某种特定方式遍历网格外链接,则应关闭此功能。 |
Auto Repath |
启用此属性后,代理将在到达部分路径末尾时尝试再次寻路。当没有到达目标的路径时,将生成一条部分路径通向与目标最近的可达位置。 |
Area Mask |
Area Mask 描述了代理在寻路时将考虑的区域类型。在准备网格进行导航网格烘焙时,可设置每个网格区域类型。例如,可将楼梯标记为特殊区域类型,并禁止某些角色类型使用楼梯。 |
NavMeshAgent API
https://docs.unity3d.com/cn/current/ScriptReference/AI.NavMeshAgent.html
Navigation窗口
https://github.com/Unity-Technologies/NavMeshComponents
Bake栏
BakeAgentSize
属性 |
功能 |
Agent Radius |
代理器半径,烘焙出来的网格和障碍物之间的空隙。 |
Agent Heigh |
代理器的高度,当场景中的导航出现上下层的时候。当楼层与楼层之间的距离比 Agent Height 的高度还要小的时候,这个区间内就不会生成导航网格。 |
Max Slope |
最大爬坡能力。 |
Step Height |
当场景中出现台阶的时候,控制多高的台阶角色可以导航,但是这个台阶的高度不能高于 Agent Height 的高度。 |
Generated Off Mesh Links
属性 |
功能 |
Drop Height |
在多高的落差之间生成跳跃线,指的是垂直方向,默认值为 0,表示该选项无效;生成的跳跃线是单向的,高处往低处跳跃。 |
Jump Distance |
在多远的距离之间生成跳跃线,指的是垂直方向,默认值为 0,表示该选项无效;这时生成的跳跃线也是单向的,但是,距离方向的跳跃线往往是成组生成,所以还是可以双向移动的。 |
Object栏
属性 |
功能 |
Navigation Static |
当前模型是否参与了“导航系统” |
Generate OffMeshLinks |
生成“网格跳跃线” |
Navigation Area |
导航区域,定义当前区域的地形,在Areas栏中可以设置不同地形的花费 |
OffMeshLink组件
组件中各个变量说明详见官方文档:https://docs.unity3d.com/cn/current/Manual/class-OffMeshLink.html
属性 |
功能 |
Start |
描述网格外链接起始位置的对象。 |
End |
描述网格外链接起始位置的对象。 |
Cost Override |
定义角色通过这个“跳跃线”所要付出的代价是多少。默认值是-1,代表角色通过该跳跃线不需要代价。注意:这里的代价覆盖的是“Navigation Area”参数指定的地形代价。 |
Bi-Directional |
如果启用此属性,则可以在两点上来回跳跃。否则,只能按照从Start 到 End 的方向遍历链接。 |
Activated |
指定寻路器 (pathfinder) 是否可用 |
Auto Update Positions |
如果启用此属性,当端点移动时,网格外链接将重新连接到导航网格。如果禁用,即使移动了端点,链接也将保持在其起始位置。 |
Navigation Area |
如果勾选该参数,则表示自动更新位置,我们在运行状态的时候,是可以动态的改变开始点或者结束点的位置的,同时跳跃线也会动态的更新,反之亦然。 |
NavMeshObstacle组件
组件中各个变量说明详见官方文档:https://docs.unity3d.com/cn/current/Manual/class-NavMeshObstacle.html
属性 |
功能 |
Shape |
障碍物几何体的形状。选择最适合对象形状的选项。 |
Box |
|
Center |
盒体的中心(相对于变换位置)。 |
Size |
盒体的大小。 |
Capsule |
|
Center |
胶囊体的中心(相对于变换位置)。 |
Radius |
胶囊体的半径。 |
Height |
胶囊体的高度。 |
Carve |
勾选 Carve 复选框后,这是一个障碍物,不勾选则是一个colider。 |
Move Threshold |
当导航网格障碍物的移动距离超过设置的值时,Unity 会将其视为移动状态。 |
Time To Stationary |
障碍物位置检查的时间频率(以秒为单位)。 |
Carve Only Stationary |
启用此属性后,按照上面的时间间隔固定的检查位置,否则每一帧都更新网格数据。 |