+-
UE4蓝图AI角色制作(二)

接上一节

4、 寻路原理

在场景中进行寻路是AI的基本功能,但这种寻路并非简单地从A点移动到B点。寻路有两个关键部分:计算路径和躲避障碍。在本模块中,我们将假设对象是静态的。如果要让AI在场景中移动,就需要用到寻路网格体。寻路网格体用于帮助AI在场景中进行寻路。网格体由大量凸多边形组成,规定了AI可以哪些区域通行。

寻路网格体都是预先计算(“烘焙”)好的,这意味着在游戏开始前,以2D网格体形式表示的寻路网格体就已经包含了复杂的3D碰撞数据。这就使得寻路的开销更低。对于那些代理数量或类型不确定的实时体验来说,这点尤为明显。为了让AI使用预先计算好的寻路信息,需要在关卡中添加一个寻路网格体Actor。在场景中添加寻路网格体十分简单。现在我们就来了解下添加过程。

在场景中添加寻路网格体十分容易。首先,打开编辑器左侧的模式面板。选中“寻路网格体”,将它拖入视口中的场景。

选中寻路网格体Actor,然后在细节面板中将笔刷设置中的X、Y、Z属性分别调整为4000、4000、400。调整寻路网格体的位置,让它覆盖AI要通行的所有场景区域。如果编辑器中没有显示寻路网格体,你可以按下P键来显示它。这个快捷键可用于在编辑器中显示/隐藏寻路网格体。

在添加了寻路网格体后,或者在场景发生改动后,你需要将寻路网格体烘焙到新的场景中。为此,打开“构建”下拉菜单,选择“构建路径”。

5、 使用寻路网格体边界体积

要想实现寻路导航,我们首先要提供一个导航网格体以便AI实现寻路。然后根据AI进行配置导航网格体,之后验证生成的导航网格体是否正确地生成。为此,我们需要一个可视窗口来实现网格的可视化,最后我们会学习如何搭配使用导航网格体修改器体积以及导航网格体边界。首先,我们需要通过导航网格体体积来准确定义网格体生成的位置。在左侧的模式面板中,找到“导航网格体体积”(Nav mesh bounds volume),并将它拖入视口。这个体积准确定义了导航网格体系统将在哪些区域生成网格体。首先,我们需要大致将“导航网格体体积”这个对象大致移至视口的中间,然后在右侧的细节面板中,向下滚动,直到找到“笔刷设置”分段(Brush setting)。将X值、Y值、Z值分别设置为“4000”,“4000”,“400”。按下“P”键,可以显示出绿色的寻路网格体。为了管理导航网格的自动更新设置,可以点击“编辑”中的“编辑器偏好设置”。打开后,在左侧找到“关卡编辑器”(level editer),然后选择“杂项”,在右侧的“编辑”分段中,取消勾选“自动更新导航”,最后关闭“编辑器偏好设置”窗口。

 

 

 

实际上,我们可以使用“RecastNavMesh”调整导航网格物体的部分属性。当我们在场景中添加导航网格体边界体积时,“RecastNavMesh”它已经被建立完成。如果我们找到编辑器右上方的世界大纲视图,然后找到“RecastNavMesh”,选中并找到下方的细节面板,然后找到“绘制偏移”选项。“绘制偏移”的作用是调高或降低导航网格体的调试网格体,帮助我们更好的观察到那些可能被关卡模型政党的导航区域。

另一个实用功能就是导航修改器体积。到目前为止,我们所有的导航网格体都是二元的,要么AI能够走到网格体上,要么不能。那么如何表现出一个地方虽然能够通过,但是相对来说比较困难呢?这就是导航修改器体积的作用。我们可以在模板面板中找到它,然后拖入视口。我们可以看到,在默认状态,它会在导航网格体中清空一片区域(并不会去除导航网格体)。在右侧细节板块,可以找到“区域类”下拉菜单(Defaut”area class”),在下拉菜单中有默认几个选项。通过这些选项,我们可以使用导航修改器体积来为导航网格体添加一些额外的信息,比如该区域更难通行,所以AI会优先尝试其他路线等等。