Eric_Song 发表于 2018-1-3 09:21:36

AI功能拓展,EQS系统

前一篇文章讲了UE4中AI的实现步骤,这一篇来讲一下AI系统的另一个单元,就是EQS系统,中文名字叫环境查询,顾名思义其实就是对当前的场景里满足条件的一些信息进行查询,并且返回结果,让我们AI根据收集的这些信息做出不同响应。
使用前请务必在编辑器设置-试验性功能-AI的分类中开启EQS。
先来放出工程(UE4.18):https://pan.baidu.com/s/1nuYHP81
腾讯视频地址:https://v.qq.com/x/page/b0528zpw3cu.html
主要逻辑看视频,下面来仅就大致流程做一说明:
https://ericsong.org/wp-content/uploads/2.png
1、左侧的sequence会先等待2秒,执行一个名叫FindGM的EQS,返回值到黑板上GMPlayer,这个返回的对象是玩家,因为这一步是检测我们场景里所有的玩家;
2、中间的名为GM_AI_Env的EQS其实是很主要的,他主要负责检测AI与玩家之间的距离,并且根据权重来将网格上识别哪些为安全区域,权重越大,越安全,如下图所示的权重分布:
https://ericsong.org/wp-content/uploads/QQ截图20180102213841.png
中心区域为红色,也就是说距离目标越近,分数越低,距离目标越远,分数越高,EQS在检测时候,会将绿色区域判断为安全区域,这个安全区域只是相对于我们来讲,AI会认为绿色的区域是距离玩家越远。
这个EQS如下图所示:
https://ericsong.org/wp-content/uploads/QQ截图20180102214233.png
Distance用来检测AI和对象之间的距离,那么Distance节点有一个Distance to的值,我们选择GMPlayer;
3、GMPlayer是一个属于EQS的蓝图类型,在蓝图内叫EnvQueryContext,用来存放一些查询对象;
4、使用EnvQueryContext内的ProvideActorsSet函数,用来获取当前所有的玩家角色,那么GM_AI_Env的EQS返回的是位于黑板的MoveToLocation,这个MoveToLocation会将该EQS执行后,绿色最大的一个点位置,存储,因为EQS会检测AI和玩家的距离,AI会从身上创建一个网状检测,所以当检测到和玩家之间的距离后,会在区域内将绿色的地方标记为安全区域,再将该位置存储在MoveToLocation中。
5、移动到MoveToLocation位置。
总体来讲EQS可以理解成对当前场景进行一个特定的扫描方式,然后划分权重,或者根据过滤器划分权重,然后将权重值比作数字,Linear的分数方程下,距离目标越近,那么分数越低,距离目标越远,分数越高。

徐一一 发表于 2018-1-3 10:11:20

好文帮顶

csujin 发表于 2018-1-3 10:16:03

清晰明了社区福利

我要不断学习 发表于 2018-1-3 11:50:41

哇哦 猫大又有小鱼干了

zapon5337 发表于 2018-1-4 09:10:18

谢谢分享

小狗笑苍天 发表于 2018-1-4 09:27:11

多谢分享。

为人民服务 发表于 2018-1-4 10:51:24

感谢分享干货:)

xjy818624 发表于 2018-6-3 12:43:49

多谢分享干货

daba123123 发表于 2019-7-2 14:20:27

感谢楼主分享
页: [1]
查看完整版本: AI功能拓展,EQS系统