什么是EQS(环境查询系统)?
是UE4AI系统的一个功能,用于从周围环境中收集数据
在EQS中,可以通过不同种类的测试向收集的数据提问,
这些测试会根据提出问题的类型来生成最适合的项目
生成器
比如EQS_FindPlayer中的SimpleGrid,是生成器,用于产生将要测试和加权的
位置或Actor,生成的是一个范围,一个形状
测试节点
主要是用于测试距离,自定义的边界,点,或者追踪某些命中或没命中的事件,还有
寻路的长度等等.
在Trace追踪测试中
蓝色代表过滤掉的位置,即不选择
红色是保留位置,即选择位置
Trace测试:
在场景查询的结果中,通过测试向结果提问,来过滤或选择出最优值.
Distance测试
根据不同测试选最优值,绿色比其他颜色更优先选择
情境
情境是为使用的所有测试或者生成器提供参考框架,可以是简单的查询
器,也可以很复杂,例如某种类型的所有Actor
可以简单理解为:什么地方要测试,或者谁需要测试
场景查询测试Pawn
通过把这个拖入场景,在编辑器里修改数值,可以提前看到查询测试变化,对应的范围变化,和查询颜色变化
允许控制器作为EQS查询器
项目设置中打钩后
允许将玩家或者AI在控制的Pawn,作为一个查询器使用
目前个人理解就是:原先是Test拖入场景的Pawn,现在可以作为AI,移动查询使用了.
EQS查询器中节点概念理解
1:ActorsofClass
生成器在搜索中心,周围特定的半径内,查找给定类的所有Actor
返回的Actor可以作测试的项目使用.
其中Actor可以被视为包含特殊类型对象的容器.
注意:这个搜索不受关卡中视角,地形的影响,只要在范围内,就能找到
2:情境
EnvQueryContext_Querier
项目中的EQC_C,就是指的查询器,
是当前被AI控制器控制的Pawn,执行启动场景查询的行为树,举个栗子
可以使用查询器作为情境的一种情况是:
我希望在AI角色周围的场景中搜索它们可以使用的物品,或者寻找可以使其获得
掩护躲避玩家的地方,或者只是确定AI执行查询的当前所在位置
简单理解是:以谁为查询中心,或参照物,物体,敌人,友方?
当设置为EnvQueryContext_Item时
如果打开仅生成半径中的Actor选项,则无法搜寻场景中玩家
去掉后,表示在整个场景中找玩家,无距离限制.
当设置为EnvQueryContext_Querier时
如果打开仅生成半径中的Actor选项,则表示在范围内搜索玩家
去掉后,表示在整个场景中找玩家,无距离限制.
自定义情境
重载函数中提供了一个.多个位置的数组
一个,多个Actor的排列
在Point:Grid中,会在GenerateAround下制定的查询器周围生成项目(item)网格
Dot测试
计算两个矢量的点积,利用点积的特性,这些矢量可以是情境选择,也可以是从一个点
到另一个点的矢量,用于确定是否有某些东西面向其他东西.
若两个矢量点积大于0,那他们方向朝向相近,小于0则方向相反,判断在player前面还是在后面
(待补充)