UE的AI基础(2)EQS

1. EQS基础

1.1 生成器节点

在这里插入图片描述

生成器:在需要生成的地方生成一系列的范围的测试点,用于加权和测试。

1.1.1 Actors of Class

在这里插入图片描述

用于查找范围内的Actor类,不受地形、视角等的影响,只要在范围类的Actor都会被找到。

1.1.2 Points:Grid

用于生成网格,有大小和间距参数,同时需要指定生成在那个物体周围。

在这里插入图片描述

1.2 情景

EnvQueryContext_Item(项目)是Test Pawn中看到的小球,就是生成器生成的点。
EnvQueryContext_Querier(查询器)是被AI控制器占据的Pawn,执行启动场景查询的行为树。

在这里插入图片描述

在Actors of Class中搜索中心使用EnvQueryContext_Item则搜索不到玩家,搜索中心使用EnvQueryContext_Quener则在一定范围内能搜索到玩家。

自定义情景:使用EnvQueryContext_BlueprintBase(EQC)作为环境查询情景,在蓝图中,通过重载函数进行目标的返回。

在这里插入图片描述

1.3 测试

在EQS中,测试用来确定生成器所产生的项目哪个是最佳的选择

1.3.1 Distance测试

在这里插入图片描述

注意:
(1)在相对的标准化下,最小的为0,最大为1。
(2)常量在绝对的标准化下所有都是1;在相对的标准化下最近的为0。
(3)反转线性就是线性反过来。
(4)得分因素通常情况下可认为就是个乘法因子。
(5)因为得分是0-1的,平方后得分会更倾向于0,平方根后得分会更倾向于1。

1.3.2 Dot测试(点乘测试、方向测试)

在这里插入图片描述

注意:
(1)两种模式,一种为Rotation,即直接是矢量方向,另一种为两点,首点到尾点的矢量方向。
(2)使用两向量的点乘就是去计算两向量方向夹角的得分,如下图所示,朝前的方向得分为1,朝后的方向得分为0。

在这里插入图片描述

1.3.3 Trace测试

在这里插入图片描述

布尔匹配为true,即匹配true的值,把true的值设置为Trace,过滤掉。如下图所示。

在这里插入图片描述

1.3.4 Overlay测试

在这里插入图片描述

1.3.5 Project投射测试

Project投射测试主要用于修正测试点的位置,如在不平整的地面上生成。
在Grid中有Projection Data的属性可用于修正生成点的位置,这与Project投射测试的作用一致。

在这里插入图片描述

而添加Project投射测试可以根据修改Projection Data的属性进行过滤和得分。

在这里插入图片描述

2. EQS的简单应用

2.1 NPC寻找玩家

在项目设置中勾选EQS选项。

在这里插入图片描述

(1)新建Player Charater类EQS_NPC、AIController类EQS_AI,黑板EQS_BB,行为树EQS_BT,场景查询蓝图类EQ_FindPlayer。

在这里插入图片描述

新建EnvQueryContext_BlueprintBase蓝图类,命名为EQC_PlayerContext。

在这里插入图片描述

(2)在EQC_PlayerContext蓝图中重载Provide Single Actor函数,作用为在EQS中添加玩家对象的返回值。

在这里插入图片描述

在这里插入图片描述

(3)在EQ_FindPlayer蓝图类中,引出Point:Grid节点,改为1000的半径和150的间隔。
添加仅过滤测试Trace

在这里插入图片描述

添加仅得分测试Distance,并设置积分因子为-1。

在这里插入图片描述

(4)在黑板中添加关键帧,布尔类型的IsFindObject,矢量类型的ObjectPosition,对象类型的ObjectActor,注意:ObjectActor的Base Class为Actor

在这里插入图片描述

(5)编写随机移动的BTTask

在这里插入图片描述

(6)在NPC_AI蓝图中添加AIPerception组件,并添加AI Sight config。

在这里插入图片描述

针对AIPerception添加目标感知时更新。

在这里插入图片描述

在目标感知时更新存储Actor并判断是否为Player。

在这里插入图片描述
在这里插入图片描述
当没有发现目标时,设置5秒的计时器,并设置没有找到目标,5秒后丢失目标。当感知发现后进入Fight逻辑。

(7)编写对应的行为树逻辑
行为树执行过程逻辑如下:首先AI巡逻,如果看到玩家,会触发视觉感知更新,AI将一直看着玩家;当玩家在AI视觉中消失,会触发视觉感知更新,将Is Find Object置为false,同时运行EQS,根据玩家由近到远的得分选取移动位置,直到视觉中看到玩家,触发新一轮的视觉感知更新,并设置5s的Set Timer by Event,即5s后丢失目标

在这里插入图片描述

最终效果:AI看到玩家后,面对玩家,若玩家躲避,AI会移动到一个新的位置(EQS查询的结果)并继续看着玩家。

2.2 躲藏玩家

在这里插入图片描述

添加仅过滤的测试Trace。

在这里插入图片描述

添加仅得分的测试Distance。

在这里插入图片描述

再添加仅得分的测试Distance。
注意:EnvQueryContext_Querier是在AI角色的周围搜索,即返回的是AI控制器控制的Pawn。
此处的作用即是距离角色最远,而距离AI本身最近的点。

在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_45617648/article/details/130938339
今日推荐