Nav Mesh Agent 导航网格代理
Nav Mesh Agent 通常放在角色身上,用于实现角色的导航移动。
关于 Nav Mesh Agent 的基本使用,可以参考上一篇文章:【Unity】Unity寻路系统讲解及Navigation实际应用
属性
Steering:移动相关属性:
- Speed:移动速度,也可以理解为速度上限。
- Angular:角速度,角色转向的速度,通常设置120即可。
- Acceleration:加速度,使角色加速,直到达到速度上限为止,加速度变大角速度也会相应加快。
- Stopping Distance:停止距离。角色到达目的地停止的距离。
- Auto Braking:自动停止。使角色到达目的地后停止移动,避免原地跑步和抽搐。
Obstacle Avoidance:避障设置。
- Radius:Agent的半径。
- Height:Agent的高度。
- Quality:躲避质量,质量越高,躲避越细致、越智能。
- Priority:优先级,范围 0 ~ 99。0为最高优先级,99为最低,高优先级的Agent不会与低优先级的Agent进行碰撞。
Path Finding:寻路设置。
- Auto Traverse Off Mesh Link:勾选后表示Agent可以自动的通过,场景中两个分开的物体间所创建的Off Mesh Link。
- Auto Repath: 勾选后表示当Agent的当前路径无效时,可以自动计算寻找新的路径前进。
- Area Mask: 可以指定Agent可通过哪些层,划分其可通过的区域。
Off Mesh Link 网格外链接
Off Mesh Link 用于在不连通的地形上做虚拟路面,使角色能够通过无地形区域,通常用于虚拟桥、浅滩、高低墙跳跃等。使用 Off Mesh Link 通常是指定两个空物体(或地图上的某两个点位),然后指定组件上的 Start 和 End 属性。
属性
- Start:外链起点。
- End:外链终点。
- Cost Override:如果值为正,则在计算处理路径请求的路径成本时使用该值。否则,使用默认成本(此游戏对象所属区域的成本)。如果 Cost Override 设置为值 3.0,则在网格外链接上移动的成本将是在默认导航网格区域上移动相同距离的成本的三倍。如果希望让代理通常优先选择步行,但当步行距离明显更长时使用网格外链接,则 Cost Override 设置将变得有用。
- Bi-Directional:如果启用此属性,则可以在任一方向上遍历链接。否则,只能按照从 Start 到 End 的方向遍历链接。
- Activated:指定寻路器 (pathfinder) 是否将使用此链接(如果将此属性设置为 false,则将忽略它)。
- Auto Update Positions:如果启用此属性,当端点移动时,网格外链接将重新连接到导航网格。如果禁用,即使移动了端点,链接也将保持在其起始位置。
- Navigation Area:描述链接的导航区域类型。该区域类型允许您对相似区域类型应用常见的遍历成本,并防止某些角色根据代理的区域遮罩 (Area Mask) 访问网格外链接。
链接是否成功
链接的两个端点要在烘焙路径范围内才能链接成功,否则该链接将失去效果。下图左为链接成功,又为链接失败。
静态障碍物和动态障碍物
静态障碍物
如果物体为静态障碍物,通常将物体设置为 Navigation Static 静态物体,然后进行烘焙即可。这样会降低角色寻路卡死的几率。
效果如下:
动态障碍物
如果该障碍物是可移动的障碍物,可以使用 Nav Mesh Obstacle 组件,实现物体的动态碰撞。比如一些动态机关或可移动的墙壁等。动态障碍物通过 Carve 设置也可以实现动态烘焙挖孔,但性能损耗较大,通常情况下尽量不要使用该功能。
Nav Mesh Obstacle 导航网格障碍物
Nav Mesh Obstacle 是寻路网格的障碍物组件,用于实现动态碰撞。
属性
- Shape:碰撞图形(胶囊、方块)。
- Center:中心点位。
- Size:大小。
Carve:切割设置,该设置能使路面动态烘焙,动态将障碍物的区域从烘焙网格中切除。勾选 Carve 复选框后,导航网格障碍物会在导航网格中创建一个孔。
- Move Threshold: 当导航网格障碍物的移动距离超过 Move Threshold 设置的值时,Unity 会将其视为移动状态。使用此属性可设置该阈值距离来更新移动的雕孔。
- Time To Stationary:将障碍物视为静止状态所需等候的时间(以秒为单位)。
- Carve Only Stationary:启用此属性后,只有在静止状态时才会雕刻障碍物。
障碍和雕刻
导航网格障碍物可通过两种方式影响导航网格代理在游戏中的导航:
障碍
未启用 Carve 时,导航网格障碍物的默认行为类似于碰撞体的行为。导航网格代理会尝试避免与导航网格障碍物的碰撞,当靠近时,它们会与导航网格障碍物碰撞。障碍躲避行为是非常基本的,具有一条短半径。因此,导航网格代理可能无法在导航网格障碍物很混乱的环境中找到方向。此模式最适合用于障碍物不断移动的情况(例如,车辆或玩家角色)。
雕刻
启用 Carve 时,障碍物处于静止状态时将在导航网格中雕刻一个孔。移动时,障碍物即为障碍物。在导航网格中雕刻一个孔后,寻路器 (pathfinder) 能够让导航网格代理绕过雕有障碍物的位置周围,或者如果当前路径被障碍物阻挡,则寻找另一条路线。对于通常会阻碍导航但可被玩家或其他游戏事件(如爆炸)移动的导航网格障碍物(例如板条箱或木桶),最好为其开启雕刻功能。
雕刻注意事项:
- 在Bake场景的时候,Navigation窗口的Bake页面有一个高度值,场景中的导航网格通常作为一个平面,当NavMeshObstacle 距离小于这个高度时,才会在导航网格上挖洞,否则NavMeshObstacle 还是以普通模式存在的。
- NavMeshObstacle 在刚创建的时候最好先关闭NavMeshObstacle 这个组件,但需要是再打开,否则会有bug(先创建NavMeshObstacle,再Additive场景后,场景中一直存在一个不可通过区域)。创建完毕后,移动到适当位置再激活这个组件。
- 碰撞还是使用trigger。
- 最好不要同时使用RigidBody,有bug。
- 在挖洞时,设备掉帧比较明显。善用Move Threshold。
更多内容请查看总目录【Unity】Unity学习笔记目录整理