[AI] AI功能拓展,EQS系统

[复制链接]
查看5523 | 回复8 | 2018-1-3 09:21:36 | 显示全部楼层 |阅读模式
前一篇文章讲了UE4中AI的实现步骤,这一篇来讲一下AI系统的另一个单元,就是EQS系统,中文名字叫环境查询,顾名思义其实就是对当前的场景里满足条件的一些信息进行查询,并且返回结果,让我们AI根据收集的这些信息做出不同响应。
使用前请务必在编辑器设置-试验性功能-AI的分类中开启EQS。
先来放出工程(UE4.18):https://pan.baidu.com/s/1nuYHP81
腾讯视频地址:

主要逻辑看视频,下面来仅就大致流程做一说明:

1、左侧的sequence会先等待2秒,执行一个名叫FindGM的EQS,返回值到黑板上GMPlayer,这个返回的对象是玩家,因为这一步是检测我们场景里所有的玩家;
2、中间的名为GM_AI_Env的EQS其实是很主要的,他主要负责检测AI与玩家之间的距离,并且根据权重来将网格上识别哪些为安全区域,权重越大,越安全,如下图所示的权重分布:

中心区域为红色,也就是说距离目标越近,分数越低,距离目标越远,分数越高,EQS在检测时候,会将绿色区域判断为安全区域,这个安全区域只是相对于我们来讲,AI会认为绿色的区域是距离玩家越远。
这个EQS如下图所示:

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的分数方程下,距离目标越近,那么分数越低,距离目标越远,分数越高。

个人博客 : ericsong.org
徐一一 | 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 | 显示全部楼层
感谢楼主分享
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则