导航组件介绍NavMeshSurface、NavMeshObstacle、NavMeshModifier

1,384 阅读4分钟

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组件烘焙的物体进行微调

属性介绍
ModeAdd or Modify object:基于AreaType,修正物体上的路径烘焙Remove Object:取消此物体上面的渲染路径
AffectedAgents选择要影响的Agent type
Apply To Children应用到子物体
OverrideArea是否使用其他类型的Area Type
AreaType默认或者自定义的AreaType,影响寻路优先级
OverrideGeneratieLinks不了解

首先我们创建多个AreaType:Water、Swamp分配同的权重

NavMeshModifierVolume介绍

NavMeshModifierVolume与NavMeshModifier差不多,区别是前者作用于对体积盒包围的所有物体(或物体的部分)