UE4 巡逻系统及AI感知组件

随机巡逻和AIPerceptionComponent

随机巡逻

首先创建AI行为树和黑板
自己进行命名
UE4 巡逻系统及AI感知组件
然后打开新建的黑板,在黑板中添加两个布尔(IsHearSomeNoiseIsFindPlayer)、一个向量(TargetLocation)和一个对象(TargetActor)。
UE4 巡逻系统及AI感知组件

然后打开AI的蓝图,在蓝图中拖出“事件开始运行”函数,拿出一个自身的引用,然后获得AI控制器,然后从AI控制器中拖出“运行行为树”函数。BTAsset选择刚刚创建的行为树。
UE4 巡逻系统及AI感知组件
然后关闭AI蓝图,在内容浏览器创建一个蓝图,继承于BTTaskBlueprintBase
UE4 巡逻系统及AI感知组件
打开新建的任务,然后在函数一栏重写“接受执行”函数。
然后创建一个新的变量,将名字改为TargetLocation,选为公有变量(点击变量旁边眼睛样的图案),变量类型选为黑板键选择器。UE4 巡逻系统及AI感知组件
然后拖出变量,并从变量拖出函数“将黑板值设为向量”,从“事件接收执行”函数中的OwnerActor拖出获取当前的位置,然后从返回值拖出获取可导航半径内的随机点,半径自己设置。然后将返回值连到函数“将黑板值设为向量”的参数中,然后完成函数的执行。
UE4 巡逻系统及AI感知组件
然后打开新建的行为树,将行为树右侧细节面板中的黑板资源设为新建的黑板。(一般默认设置为第一个)
UE4 巡逻系统及AI感知组件

然后从根组件拖出一个sequence,然后拖出task选择刚刚新建的任务,然后在任务的右侧细节面板处修改TargetLocation的值,选择为黑板中的TargetLocation(两个值不是同一个)。
UE4 巡逻系统及AI感知组件

拖出一个MoveWaitMove中的黑板值设为TargetLocation,设置Wait时间。
UE4 巡逻系统及AI感知组件

将AI蓝图拖到场景中,便可实现随机巡逻。

AI感知组件

回到内容浏览器,创建两个蓝图,继承于BTDecorator_BlueprintBase(BT装饰器蓝图基础),分别用来判断AI是否发现玩家和AI是否听到声音
UE4 巡逻系统及AI感知组件

然后在AI蓝图里添加两个Bool变量IsFindPlayer IsHearSomeNoise。接着分别对两个蓝图实现功能。

IsHearSomeNoise
先创建一个变量,类型设置为黑板键选择器,并设为公有变量。
UE4 巡逻系统及AI感知组件
UE4 巡逻系统及AI感知组件

点击重写函数“执行条件检查AI”,先将ControlledPawn转换成我们的AI蓝图,然后获取AI的布尔类型的值IsHearSomeNoise,然后拖出黑板值IsHearSomeNoise,然后拖出函数“将黑板值设为布尔”,然后对黑板值“按布尔获取”判断是否为真,将结果放到返回参数里。
UE4 巡逻系统及AI感知组件

IsFindPlayer
对IsFindPlayer蓝图也进行类似的处理,从而获取是否发现目标。

打开行为树,做成如下图所示
UE4 巡逻系统及AI感知组件
最右侧的MoveTo的黑板值设为TargetActor,其余MoveTo的黑板值均为TargetLocation装饰器的添加在节点右键添加装饰器里
装饰器中,观察期中止选择Self,当条件不成立时就不执行接下来的步骤。
翻转条件打上勾(这个参考你在装饰器中条件的判断,由于我写的时候是当为“真”的时候处理,所以需要bool不成立时才执行下面的操作)。
UE4 巡逻系统及AI感知组件
打开AI蓝图,在“运行行为树”后执行“将值设为对象”,获取黑板中的创建的TargetActor,将玩家Pawn设置进去。
UE4 巡逻系统及AI感知组件
在AI蓝图中给AI添加一个AI感知组件,然后分别创建视觉和听觉感知器官
UE4 巡逻系统及AI感知组件
UE4 巡逻系统及AI感知组件
我们可以对里面的参数进行修改
UE4 巡逻系统及AI感知组件
UE4 巡逻系统及AI感知组件
但注意的是,我们需要将按归属检测这一栏中的所有选项都打勾。

UE4 巡逻系统及AI感知组件

然后打开玩家蓝图,给玩家添加一个AI感知刺激源组件
UE4 巡逻系统及AI感知组件

并添加听觉和视觉刺激源
UE4 巡逻系统及AI感知组件
然后再打开AI蓝图,们点击AI感应组件,可以看到官方提供的函数,然后点击函数“目标感知更新时”。
UE4 巡逻系统及AI感知组件

将被感知的物体转换成我们的玩家类,将AIStimulus结构打开可以看到各种参数,比如Successfully Sensed可以判断是否感知到物体。
运用这点去改变IsFindPlayer的值,可以让AI去做相应的操作。
UE4 巡逻系统及AI感知组件
然后在场景中,AI便可以通过视觉发现目标后去跟踪目标。
调试的时候,按回车左边的 “ ’ ”键可以打开后台的调试,再按小键盘4可以查看AI感知组件的效果。
UE4 巡逻系统及AI感知组件

如果需要AI通过听觉去发现目标并去查看,我们可以通过动画通知去实现,在动画通知中调用函数“报告噪点事件”,AI便可以感知到。然后去修改AI蓝图中的“目标感知更新”中的内容即可。
UE4 巡逻系统及AI感知组件
UE4 巡逻系统及AI感知组件
(在后台调试中,红色球体代表听觉系统所感知的位置,绿色球体代表视觉系统所感知的位置)

尾言

据目前开发的经验来看,感知和听觉系统可以正常的发挥作用,但是我推荐将听觉触发和视觉触发分开来,比如:听觉刺激源可以放在一个Actor上,当他碰到场景的时候,就发出噪点,而视觉刺激源放在玩家身上。尽量避免将两个刺激源放在同一个物体上,如果放在一起,可能无法做到AI根据不同的刺激从而做出不同的操作。
或许存在着某种方法可以将两个刺激源放一起,且可以让AI做出不同的行为,如果有人有更好的建议,可以提出并修正!