Unity寻路系统之Navigation介绍

Unity寻路系统之Navigation介绍

前言

Unity中的寻路算法有很多种,为了方便开发者,Unity中内置了一套自动寻路系统。本文将主要介绍Navigation中的各种基础属性。

Navigation相关组件

NavMesh Agent(导航网格代理)

导航网格代理,也就是我们的寻路代理,可以为角色移动选择合适的路线,并且在移动的过程中避开障碍物。

NavMesh(导航网格)

这是一种数据结构,用于描述在我们的游戏场景中可以行走的地面,并且可以从游戏场景中算出从一个点到另一个点的可行走路径。

Off-Mesh Link(网格外链接)

该组件允许我们合并无法使用可行走表面来表示的导航捷径。比如,跳过沟渠或围栏,或在通过门之前打开门,全都可以描述为网格外链接。

NavMesh Obstacle (导航网格障碍物)

此组件用来描述在游戏场景的导航时需要避开的障碍物。障碍物在移动时,代理会尽力避开它,障碍物为静态时,会在导航网格中雕刻一个孔,使得代理可以通过改变自己的移动路径来绕开它,如果障碍物挡住了路径,代理则会尝试寻找新的路线。

创建导航网络

选择需要创建导航网格的地形,将右边Inspector面板中的Static勾上。
在这里插入图片描述

在这里插入图片描述
打开Navigation窗口(Window->AI->Navigation),在烘焙(Bake)界面下点击Bake。
在这里插入图片描述

Navigation窗口中Bake界面相关参数

Agent Radius

定义可移动区域鱼障碍物之间的间隔。

Agent Height

定义代理可以达到的位置在空间有多低(比如进入坑里)。

Max Slope

定义代理可以走上的坡道的倾斜角度。

Step Height

定义代理可以踏上的障碍物的高度(比如台阶或楼梯)。

Drop Height

代理可以跳下的高度。

Jump Distance

代理可以跃过的距离。

Min Region Area

可剔除未连接的小型导航网格区域。表面积小于指定值的导航网格区域将被移除

简单应用

在这里插入图片描述

先在场景中随便搭建一个地图,红框中的Cube为障碍物,蓝框中的Cube为一个与地面夹角为45度的坡。
给障碍物Cube添加组件NavMesh Obstacle,这样在烘培(Bake)NavMesh时Unity就会知道这个Cube是个障碍物。
在这里插入图片描述

打开Navigation窗口进行如下设置。
在这里插入图片描述
点击Bake进行烘培。
等待烘培完成后我们可以在Scene窗口下看到这样的画面。
在这里插入图片描述
其中的蓝色部分是NavMesh覆盖的部分,这些部分是“可移动的”。我们添加了NavMesh Obstacle组件的Cube被识别成了障碍物,根据我们的设置,它边缘向外0.5m为“不可移动”区域。
坡的坡度为45度,在我们设定的可移动范围内,所以坡上也被NavMesh覆盖,值得注意的是在坡的边缘向内与向外0.5m的范围都是“不可移动”区域,并且如果坡底高度小于我们设定的Agent Height(导航高度)值,也会被设为“不可移动”区域。

猜你喜欢

转载自blog.csdn.net/weixin_50617270/article/details/129013791