UE学习记录:EQS
EQS提供给行为树使用,可以配合寻路网格(也可以不依赖寻路网格进行工作)帮助AI进行位置信息的筛选,选出最优检测点为行为树的黑板更新关键帧。
在编辑器偏好设置搜索EQS,将其勾选上并重启编辑器。内容->右键->人工智能->环境查询,命名为EnvQuery_FindNearbyLocation,在根下添加一个Donut生成器,并添加Distance和Trace测试,作如下设置,对于细节,生成器可以对生成检测点的范围,数量,方向进行调整;Distance测试是以距离作为评分依据,对生成器生成的点进行评分,“到此距离”就是生成的检测点与此设置的距离,这里选择自己创建的蓝图QueryContext_TargetActor,父类为EnvQueryContext_BlueprintBase,它提供了玩家的位置,过滤类型改成最小,浮点值改成了500,因为我们希望距离500cm外的位置才会被考虑进评分,这样AI就不会走到玩家脸上才开始攻击;Trace测试解决了两个目标之间有障碍物的问题,比如AI会对隔着墙对玩家攻击。


然后到行为树下添加EQS,细节中的黑板键设置为MoveToLocation,查询模板选择刚才创建的Query_FindNearbyLocation,这样行为树执行EQS时,筛选出来的值赋给MoveToLocation,在运行模式中可以调整其随机性,然后把MoveToPlayer中的黑板键改为MoveToLocation,AI就会走到MoveToLocation的位置。


想让AI在发现玩家时再追踪玩家,可以用到PawnSensingComponent。思路:先到RgAICharacter.h声明UPawnSensingComponent组件,在cpp文件里将自定义的函数绑定到委托OnSeePawn,这样当AI角色看到Pawn类型的对象后,就会调用绑定的自定义函数,在自定义函数里将Pawn传给黑板键TargetActor。
在AI的蓝图中的PawnSensingComp组件中可以调整AI的视觉范围,视觉角度,听觉范围等。