系列文章目录
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,此时它就无法从右边走到左侧。

8168

被折叠的 条评论
为什么被折叠?



