UE4 简单记录EQS的使用方法

介绍

EQS环境查询 主要是用来从场景环境中获得你想要的满足指定条件的数据,主要是和AI行为树配合使用, 比如获得获得玩家距离最近的位置等等
详细的官网文档 链接

下面是简单的使用方法,目的是寻找一个点,这个点是不被玩家看到,并且距离玩家最近的点

准备

使用EQS需要在EditorSetting中实验功能中开启EQS
UE4 简单记录EQS的使用方法

步骤

  1. 创建EQS资源
    UE4 简单记录EQS的使用方法
  2. 使用Points:Grid 可以生成点阵位置,从中筛选出我们想要的位置(如果对寻找的位置有特殊的需求,也可以自己在c++中重载UEnvQueryGenerator,参考现有的SimpleGrid等

UE4 简单记录EQS的使用方法
3. 点击Generate 在右侧的属性中介绍主要几个, 详细的可以参考官方文档
GridHalfSize:环境的范围
SpaceBetween:寻找到的点的间隔
GenerateAround:寻找范围的中心点,默认是运行行为树的ai位置,也可以通过添加继承自EnvQueryContextBlueprintBase,重载其中的Provide SingleActor,返回你想要的actor
UE4 简单记录EQS的使用方法
4. 在Generator上右键添加Test,Test分为两类,一种是过滤掉不合适的位置,还有一类是根据条件给不同的位置打分,便于比较不同位置的权重,比如你想要的最远或者最近,下面添加的三个目的分别是 寻找点存在可以抵达玩家位置路径,过滤掉可以看见玩家的位置,距离玩家越近得分越高
UE4 简单记录EQS的使用方法
这里说一下Test中通用的几项属性
Test Purpose:使用Filter过滤还是Score打分
Context: 设置目标对象,我这里是EQCContext_Player,自定义的EnvQueryContextBlueprintBase类,返回的是当前的玩家,你也可以*修改返回的对象
BoolMatch:设置是否满足test条件,简单的说比如使用trace Test,TestPurpse设置为FiterOnly,那么为true的情况,就是代表过滤掉能被玩家看见的位置,false的话就是过滤掉不能被玩家看见的位置
ScoringFactor:作用和上面的差不多,为1的话,那么距离玩家越远,得分权重越高,设置为-1的话,离玩家越近得分权重越高

  1. 在行为树种使用EQS
    UE4 简单记录EQS的使用方法
    使用RunEQSQuery,这里要注意右侧一个是BlackboardKey,这里要现在黑板中定义一个Vector类型的键,用来存储我们使用EQS的到的点,还有就是Query Template使用我们刚才创建的EQS资源,还有一个RunMode 默认的话是返回得分权重最高的点,你也可以修改返回其他类型。

测试

上面这些做完基本上就是全部内容了,接下来就是如何方便的观察我们的EQS获得点的权重情况,就是在我们的场景中拖一个EQSTestingPawn用来模拟在改Pawn的位置上使用EQS
UE4 简单记录EQS的使用方法
这里要注意需要将TestPawn的Query Template设置为EQS资源
结果就显示出来了,这里说一下 蓝色代表的就是过滤掉的点,参考我们之前的设置,可以看出来蓝色都是可以被左侧玩家看见的位置,所以需要过滤掉,绿色代表得分权重高,红色代表得分权重低,我们这里就是距离玩家越近,得分越高为绿色,距离玩家越远,得分越低为红色