概要:NavMeshSurface、NavMeshObstacle、NavMeshLink、NavMeshModifier、NavMeshModifierVolume、NavMeshAgent的各个属性介绍与使用,使用简要代码进行功能介绍。
导航组件:NavMeshSurface、NavMeshObstacle NavMeshLink NavMeshModifier NavMeshModifierVolume NavMeshAgent
NavMeshSurface介绍
放在需要烘焙的地形上面
属性 | 功能 |
---|---|
AgentType | 适用类型的代理。(旧版烘焙的网格数据只能适用于一种代理类型,而新版则可以适用多种类型的代理) |
Default Area | 定义构建导航网格时生成的区域类型。 |
GenerateLinks | 未了解 |
UseGeometry | - Render Meshes – 使用渲染网格和地形中的几何体。 – Physics Colliders – 使用碰撞体和地形中的几何体。此选项与 Render Meshes 选项相比,代理可以移动到更接近环境物理边界的边缘。 |
Object Collection
属性 | 功能 |
---|---|
Collect Objects | - All – 使用所有激活的游戏对象(这是默认选项)。 - Volume – 使用与包围体重叠的所有激活状态游戏对象。 - Children – 使用所有充当导航网格表面组件的子项的激活状态游戏对象。 |
IncludeLayers | 定义要将哪些层上的游戏对象包含在烘焙中。(默认Everything) |
Advanced(暂时不做了解)
NavMeshAgent介绍
需要使用导航的玩家/敌对生物
- Agent Type: 可以设置多个不同的Type
- BaseOffset: 碰撞圆柱体相对于变换轴心点的偏移。
Steering
- Speed 最大移动速度(以世界单位/秒表示)。
- Angular Speed 最大旋转速度(度/秒)。
- Acceleration 最大加速度(以世界单位/平方秒表示)。
- Stopping distance 当靠近目标位置的距离达到此值时,代理将停止。
- Auto Braking 启用此属性后,代理在到达目标时将减速。对于巡逻等行为(这种情况下,代理应在多个点之间平滑移动)应禁用此属性
Obstacle Avoidance
- Radius 代理的半径,用于计算障碍物与其他代理之间的碰撞。
- Height 代理通过头顶障碍物时所需的高度间隙。
- Quality 障碍躲避质量。有五个选项从None到High Quality,如果拥有大量代理,则可以通过降低障碍躲避质量来节省 CPU 时间。如果将躲避设置为None,则只会解析碰撞,而不会尝试主动躲避其他代理和障碍物。
- Priority 执行避障时,此代理将忽略优先级较低的代理。该值应在 0–99 范围内,其中较低的数字表示较高的优先级。
Path Finding
- Auto Traverse OffMesh Link 设置为 true 可自动遍历网格外链接 (Off-Mesh Link)。如果要使用动画或某种特定方式遍历网格外链接,则应关闭此功能。
- Auto Repath 启用此属性后,代理将在到达部分路径末尾时尝试再次寻路。当没有到达目标的路径时,将生成一条部分路径通向与目标最近的可达位置。
- Area Mask Area Mask 描述了代理在寻路时将考虑的区域类型。在准备网格进行导航网格烘焙时,可设置每个网格区域类型。例如,可将楼梯标记为特殊区域类型,并禁止某些角色类型使用楼梯。(比如,我想让A可以爬楼梯,B不可以爬,就可以调整Area Mask做到此效果)
public class NavigationTest : MonoBehaviour
{
[SerializeField] private Transform target;
private NavMeshAgent navMeshAgent;
void Start()
{
navMeshAgent = transform.GetComponent<NavMeshAgent>();
navMeshAgent.SetDestination(target.position);
}
}
多个Type、NavMeshSurface实现不同大小导航
动态阻碍导航
NavMeshObstacle介绍
放在障碍物元素上
属性 | 功能 |
---|---|
Shape | 障碍物的形状,有Box和Capsule两种,默认选Box |
Center | 障碍物包围盒的中心点 |
Size | 障碍物包围盒的尺寸 |
Carve | 是否动态计算网格(如果是动态的障碍物必须勾上) |
Move Threshold | 当移动超过这个距离就重新计算网格 |
Time To Stationary | 重新计算网格的时间间隔 |
Carve Only Stationary | 只有在静止时才重新计算网格,为了性能考虑勾选上即可 |
NavMeshModifier介绍
允许对一些要用来被NavMeshSurface组件烘焙的物体进行微调
属性 | 介绍 |
---|---|
Mode | Add or Modify object:基于AreaType,修正物体上的路径烘焙 Remove Object:取消此物体上面的渲染路径 |
AffectedAgents | 选择要影响的Agent type |
Apply To Children | 应用到子物体 |
OverrideArea | 是否使用其他类型的Area Type |
AreaType | 默认或者自定义的AreaType,影响寻路优先级 |
OverrideGeneratieLinks | 不了解 |
首先我们创建多个AreaType:Water、Swamp分配同的权重
NavMeshModifierVolume介绍
NavMeshModifierVolume与NavMeshModifier差不多,区别是前者作用于对体积盒包围的所有物体(或物体的部分)
NavMeshLink介绍
创建一个从起始位置到结束位置的传送路径
属性 | 功能 |
---|---|
AgentType | 可使用此link的AgentType |
StartPoint | 传送起点 |
EndPoint | 传送终点 -Swap:交换起点终点位置, -AlignTransform:元素位于路径中间点 |
Width | 传送宽度 |
CostModifier | 当该值非负时,使用该链接的成本等价于该值乘以NavMeshLink端点之间的欧式距离(Euclidean Distance) |
Auto Update Position | 如果启用此属性,当端点动态移动时(运行时移动端点位置),链接将重新连接到导航网格。如果禁用,即使移动了端点,链接也将保持在其起始位置。 |
Bidirectional | 如果启用此属性,则可以双向遍历,否则,只能按照从Start到End的方向遍历链接 |
Area Type | 该链接的区域类型(会影响AI使用该链接的成本判断) |
参考
unity NavMeshAgent(自动寻路)+鼠标点击到达地点+动态障碍寻路
学习笔记:unity自带寻路(导航)系统:Nav Mesh导航网格