AI智能
改变未来

UE4蓝图AI角色制作(六)之使用AI感知事件

12、使用AI感知事件

为了让AI能够对我们添加的视觉感官作出反应,我们需要在AI看见某个对象时,从感知系统中收集一些信息。为此我们将用到“On Target Perception Updated”事件,来捕获并存储AI感知的信息以及它感知信息的方式。最后,我们会在事件上设置一个断点,以便逐步进行调试并查看捕获到的信息。

让我们首先设置AI角色的感知事件,从而获取刺激源变量所包含的实用感知信息供AI使用。首先打开内容浏览器中的AI角色蓝图,找到AI感知组件的细节面板,找到“事件”分段。点击“On Target Perception Updated”事件旁边的加号,将它添加到事件图表中。首先保存该事件中的Actor对象引用,这个变量包含AI角色感知到的Actor的引用,而这个引用会被我们频繁的在这个蓝图中引用。左键点击Actor对象引用并拖动,选择“提升为变量”,将这个变量命名为“Perceived Actor”.现在我们来看一下这个事件提供的AI刺激源结构体。左键点击“Stimulus”拖拽,选择“中断AIStimulus”,接着点击结构体底部的箭头,关注“中断AIStimulus”的“successfully sense”这个布尔值。当AI感知到某个对象后,布尔值就会返回真,而无法感知到某个对象后,就会返回假。按住B键,左键点击事件图表,创建一个分支节点,将布尔值“successfully sense”连到分支节点的“条件”引脚上,将“Set Perceived Actor”的执行引脚连接到分支节点。

接下来,我们在分支后面添加一些逻辑,我们将把它与一个定时器相连,这个定时器会通过一个事件来清空AI感知到的对象。这是为了模拟AI在丢失对象一段时间后放弃对它进行跟踪。我们首先创建一个自定义事件,并用它来清空感知对象变量。首先,添加自定义事件,将其命名为“Targetlost”,然后拖动分支节点的“假”引脚,然后输入“set timer by event”选中。然后拖动“Targetlost”的引脚连到“set timer by event”的引脚。接下来,设置“set timer by event”的Time表示何时触发这个事件,先设置成5秒钟,不要勾选循环。

按住Alt键,找到“我的蓝图‘面板,将”PerceiveActor“变量拖放到事件图表中,将” Targetlost “事件的执行引脚连到设置节点。

现在,我们需要分支在返回真后,消除我们在假时创建的定时器。如果不这么做,我们就有可能遇到这种情况:即使目标当前能够被感知到,仍会触发“TargetLost“事件。为此,我们可以使用”clear and invalidate timer by handle“这个函数,拖动分支节点的”真“值引脚连接至该函数。正如其名,这个函数需要我们提供一个定时器句柄以便使其失效。所幸”set timer by event“提供一个句柄类型的返回值,拖动”set timer by event“的返回值,选择”提升为变量“,将它命名为”TargetLostTimer“。按住”Ctrl“键,在”我的蓝图“面板中选中”TargetLostTimer“,把它拖入事件图表,然后将TargetLostTimer“句柄连到函数的”句柄“输入。最后编译。

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » UE4蓝图AI角色制作(六)之使用AI感知事件