花1.png

unity导航组件的介绍:NavMeshSurface、NavMeshObstacle NavMeshLink NavMeshModifier NavMeshModifierVolume NavMeshAgent(unity2022.3)

概要: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使用该链接的成本判断)

参考

Unity3D新版NavMesh系统功能初步探索

unity NavMeshAgent(自动寻路)+鼠标点击到达地点+动态障碍寻路

学习笔记:unity自带寻路(导航)系统:Nav Mesh导航网格

详解Unity中的Nav Mesh新特性|导航寻路系统 (二)

Unity中实现动态NavMesh导航

Created By @Seeyou | 稀有博客