系列文章目录
Unity新导航系统—NavMeshAgent组件&NavMeshLink组件
前言
NavMeshAgent组件:用于控制游戏对象(如角色、AI等)在导航网格(NavMesh)上的移动和路径寻找。
NavMeshLink组件:用于创建两个导航网格点之间的可导航路径,允许游戏角色或代理在这些点之间移动。
这是我的学习笔记,记载的是NavMeshAgent组件和NavMeshLink组件的用法和各个属性的用处(请先去看我的“Unity新导航系统—NavMeshSurface组件 ”的文章,因为这两个组件的介绍要基于它),不能保证完全准确但是初学者可以参考一下。
NavMeshAgent组件
烘焙好场景。如果你不了解NavMesh烘焙的话请先参考我的“Unity新导航系统—NavMeshSurface组件 ”的文章,这个场景就是之前讲过的场景。
为Player添加一个NavMeshAgent组件。
实现让Player来到鼠标点击位置,实现自动导航。
Agent Type:用来设置当前Agent的类型。
Base Offset:用来设置物体在竖直方向的偏移。
Speed:用于设置物体的最大速度,这个不是物体的当前移动速度,是最大速度。
当你改为9999后,它的速度并没有快很多。
这是因为它的加速度Acceleration太小了,调大后它的速度就非常快了。
Angular Speed:用于设置物体的最大角速度,这个不是物体的当前角速度,而是最大角速度。
你改为999后它也没快很多。
还是一样调大加速度,它的角速度就明显变大了。
Stopping Distance:物体与目标点相距多远时停下。
Auto Braking:自动刹车,当物体快到目标点时自动减速,到目标点停止。
不勾选的话物体全程不会减速到目标点时速度立刻为零。
复制出一个Player,让它俩同时来到一个地方,它们会发生碰撞。
Radius用于设置碰撞体半径,把它俩的Radius设为2,它俩就不会碰撞了。
Height用于设置碰撞体高度。
Quality是碰撞质量,让它保持High Quality就行。
Priority用于设置优先级,左边的优先级设为1,右侧的设为2,越小优先级越高。
此时永远都是优先级更高的左边的Player来到鼠标点击位置。
Auto Traverse Off Mesh: 自动穿越非网格区域。
取消勾选Auto Traverse Off Mesh后,它就无法来到对岸了,而且此时也无法进行移动了。
自动重新寻路,勾选后代理会在路径被阻挡时自动重新寻路。
Area Mask:用于指定当前Agent可以走哪些区域。
当前Player所在的区域是Walkable,当改为Water后它直接无法移动,并且报错。
改为Walkable后它就可以正常移动了。
NavMeshLink组件
勾选Generate Links后进行烘焙。请先参考我的“Unity新导航系统—NavMeshSurface组件 ”的文章,这个场景就是之前讲过的场景。
所有区域都变为蓝色了。
为左侧的平面添加NavMeshModifier组件,并把左侧平面改为Water区域,重新烘焙,左侧就变为粉红色了。
把Player放在那个位置。
此时当你想让Player来到下方时,它先来到右侧平面再来到下方(因为右侧平面的cost要小很多),这显然是不合适的。
取消勾选Generate Links,重新烘焙。
为左侧平面添加一个NavMeshLink组件。
你会看到两个黄色的立方体,这两个黄色的立方体一个是起点一个是终点,点击它就可以拖动到你想要的位置。
拖到如图位置,你也可以调整组件的起点和终点坐标来移动。
此时点击下面它就不会跑到右边去了,同时还可以在两个平面间穿越。
Agent Type表示会受到影响Agent,设置为Humanoid时此时只有Humanoid才能进行穿越,其它类型的不能。
把NavMeshAgent的Agent Type设为Car,并为Car烘焙专属的NavMesh。
此时Player就无法穿越两个平面了。
勾选Bidirectional后就可以从起点到终点也可以从终点到起点。取消勾选后就只能从起点到终点。
此时只能从起点到终点。
Swap用于交换起点和终点的位置。
此时它就只能从右侧平面到左侧平面了。
Align Transform:让物体的 Transform 与起点和终点的连线对齐。
修改终点的位置后点击Align Transform会有上面三个图的效果。
Start Point和End Point的坐标其实是局部坐标,是相对于带有NavMeshLink组件的物体。
当你把End Point的坐标置为零时会发现它和左平面的坐标系重合。
Width用来设置连接区域的宽度。
此时它变宽了。
变宽的作用是让Player可以在连接区域内任意位置穿越。
Cost Modifier用于设置跨越消耗,Player会选择消耗少的地方来跨越。
下方的消耗为3上方的消耗为1。
此时Player 会优先走上方,而不是看似更近的下方。
Area Type 参数用于指定链接终点区域的类型,影响导航代理在通过该链接时的行为和路径成本。
此时终点在Water区域内,所以应当把Area Type改为Water,这个是需要你手动设置的不会因为终点放在Water区域内Area Type就自动变为Water。
虽然左边是Water区域,但是你也可以把Area Type设置为Not Walkable,此时它就无法从右边走到左侧。