系列文章目录
Unity新导航系统—NavMeshModifier组件&NavMeshModifierVolume组件
前言
NavMeshModifier组件:用于在场景中标记特定的对象,以便控制该对象在导航网格上的行为,或者改变该区域的导航网格生成规则。
NavMeshModifierVolume组件:用于在场景中定义一个区域,并通过该区域影响导航网格的生成规则。
这是我的学习笔记,记载的是NavMeshModifier组件和NavMeshModifierVolume组件的用法和各个属性的用处(请先去看我的“Unity新导航系统—NavMeshSurface组件 ”的文章,因为这两个组件的介绍要基于它),不能保证完全准确但是初学者可以参考一下。
NavMeshModifier组件
准备这样的一个场景。
准备两个Agent,其中Humanoid设置一下Jump Distance让它可以跨区域跳跃。
不要勾选它的Generate Links,烘焙Humanoid的NavMesh。
效果如图,它是不可以跳跃和从平面掉下的。
同样不勾选Generate Links来烘焙Car的NavMesh。
这俩的NavMesh重合了。
你可以隐藏Humanoid的NavMeshSurface来只显示Car的NavMesh。
选择下面的桥给它添加一个NavMeshModifier组件。
新建一个名为Water的区域。
Mode有两个选项,默认值是Add or Modify object用于添加或修改,第二个Remove object用于移除。
Affected Agents的上面两个分别是无Agent会受影响和全部Agent会受影响,下面是你创建的Agent你只能选择你创建的所有Agent的其中一个无法多选,如果你想多选那么可以多创建几个NavMeshModifier来选择。
将Affected Agents设置为Car,勾选Override Area后将Area Type设置为Water,表示用Water来覆盖这部分原来的Walkable。
把两个Agent重新烘焙。
此时Car的桥变为Water的颜色,但是Humanoid的桥还是Walkable的颜色,这是因为你的Affected Agents设置为Car。
这次改为All。
重新烘焙两个区域后,桥都变为Water的颜色了。
切换到Humanoid的NavMesh。
删除中间的桥并再进行烘焙。
选中右边的区域,给它添加NavMeshModifier组件,然后勾选Override Generate Links再勾选Generate Links。
再次烘焙,两个平面就生成了连接表示可跳跃,前提是Humanoid的Jump Distance大于两个平面间的距离。绿Cube是Humanoid类型的Agent。
此时它可以由右向左但是不可以由左向右,因为只有右边的区域有Generate Links。
给左边的平面做同样的操作。
此时它可以左右来回跳跃。
选中左侧的平面,将Mode改为Remove object。
烘焙两个Agent的NavMesh,你会发现Humanoid的NavMesh的左平面原来的Walkable被移除了,因为Affected Agents为All所以如果你切换到Car的NavMesh它的左平面其实也被移除了。
NavMeshModifierVolume组件
这是名为Humanoid的Agent的NavMesh。
选择右平面添加一个NavMeshVolume组件,其实随便找个空物体添加这个组件也行。
此时会出现一个立方体,你可以调整它的中心和大小。
将Area Type设置为Water,Affected Agents设置为All。
这是烘焙后的Humanoid的NavMesh,立方体区域会变为Water的类型。
这是烘焙后的Car的NavMesh,立方体区域同样会变为Water的类型。
如果把Affected Agents设为Humanoid。
重新烘焙两个Agent的NavMesh,此时只有Humanoid的NavMesh的立方体区域变为Water。