接上一节
6、 寻路网格体代理
通过允许配置多个“代理”,虚幻引擎使得用户能够轻松为大小各异的AI创建寻路网格体。首先,选中世界大纲视图中的“RecastNavMesh”,找到细节面板中的“生成”分段,如下图所示。这里的几个选项都与代理相关,分别是“代理半径”(Agent radius)、“代理高度”、“代理最大高度”、“代理最大斜面”和“代理最大步高”。默认的代理半径是35,而这个值应该和AI宽度相同。代理高度应该和AI高度相同。
在项目设置中,有一个选项循序我们添加多种类型的代理,并且每一种都能定义不同的参数。首先打开项目设置,然后找到“引擎-导航系统”,如下图所示,在最底层有一个“agent”分段,其中一个选项是“支持的代理”,它实际上是一个数组,我们可以向里面添加一些元素,每个元素都包括“代理半径”(Agent radius)、“代理高度”、跳、游泳等选项,我们能够为不同的AI设置不同的代理,配置不同的导航网格体。
7、 寻路网格体
创建完寻路网格体后,我们将为AI角色蓝图添加功能,让AI随机移动到附近某个位置,等待片刻,然后移动到另一个位置,循环往复。首先,要在角色蓝图中新建一个自定义事件,并让它包含随机漫游逻辑,然后使用另一个函数在游戏运行中时反复调用自定义事件。
首先在内容浏览器中打开AI蓝图,在事件图表中,右击并搜索“自定义事件”,将新的自定义事件命名为“random wander”.
拖动这个自定义事件的执行引脚,然后搜索“simple move to location”,添加到图表中,其需要两个参数,一个是角色使用的控制器,一个是以向量表示的目标位置。先设置角色使用的控制器,右击搜索“get conroller”,点击后连接至自定义事件;接下来右击搜索“get random reachable point in radius”,点击应用。这个函数有许多参数,我们只用其中部分。其中,“orgin”表示它移动的起点,“radius”定义了起点周围的移动距离。在这里,我们的起点就是第三人称AI的起点位置,我们可以使用“get actor location”函数,右击搜索得到该函数,默认下,该函数返回值就是当前目标的位置,并将其连接到“orgin”。然后根据自己需求设置半径“radius”。然后将“get random reachable point in radius”连接到“simple move to location”的“goal”中。现在,我们的随机漫游事件就完成了。
接下来需要再创建一个事件·来调用它,否则它不会自动运行。右键找到“beginplay”,拖动“beginplay”的引脚,然后搜索输入“set timer by event”。关于这个函数,首先需要告诉它触发哪个事件。为此,我们可以将“random wander”事件的委托输出引脚,连到“set timer by event”的事件输入上。接下来,我们需要指定这个事件何时被触发,可以将时间值设置为1.5。这意味着每过1.5秒,关联的事件就会被触发。为了让它能够循环触发,勾选“set timer by event”的循环选项。“set timer by event”的返回值是一个定时器句柄结构。我们不需要使用它,因为不需要在其它地方用到定时器。这意味着我们无需设置这个输出。编译后,我们需要检测这个蓝图是否在游戏中有效。