斯坦福课程 UE4 C++ ActionRoguelike游戏实例教程 0.绪论

概述

本文章对应课程第十一章 43节。这篇文章会简单介绍EQS和实际上手使用,为AI添加更丰富的行为逻辑。

目录

  1. 初识EQS
  2. 自定义查询内容
  3. 优化AI

初识EQS

在前几节课中,我们创建了一个简单的AI,这个AI可以根据与玩家的距离,结合网格导航进行自动寻路,以一种近乎固定的行为模式向玩家靠近。在实际游戏开发中,如果存在多个AI角色执行同样逻辑,我们会看到他们会像火车一样沿着同样的轨迹像玩家跑来,这样的AI显得十分的呆板。因此在这节课程中,将会介绍UE 中EQS的相关知识,以开发具有复杂功能且更富有趣味性的AI为目标。

EQS(Environment Query System)是一种用于在场景中搜索和查询指定条件的工具。通过EQS,我们可以指定一个或多个搜索条件,并使用这些条件来查找场景中符合条件的所有元素。EQS可以用于各种场景,例如AI的视觉感知,寻找目标或避开障碍物等。使用EQS,我们可以更容易地实现更像真人的AI,具体的细节,我们边做边说。

启用EQS

EQS功能在UE中是默认关闭的,要使用EQS,我们首先得打开项目设置,在所有设置中搜索EQS,将图中红框的选项勾选。

勾选完成后,记得要重启编辑器,不然是不会生效的,

开启EQS

创建环境查询

在内容浏览器中右键,选择人工智能->环境查询,创建一个环境查询,将其命名为Query_FindNearbyLocation

在环境查询中,我们可以自定义一个查询生成器,他可以获取目标周围环境的信息,通过测试(TEXT)对周围环境进行评估,自动选择符合要求的位置。

创建环境查询

进入环Query_FindNearbyLocation,将从根节点拖出一条线,选择Point:Donut类型。Point:Donut会在目标周围生成一圈一圈的圆环,每个圆环又由多个点组成。具体的参数设置,读者可以自行在细节面板里查看。

创建查询生成器

右键新建的节点,在最下面找到添加测试。我们这里选择Distance,他可以以距离作为评分依据,对生成器生成的点进行评分。如下图所示,距离一栏内的到此距离(Distance to)默认为EnvQueryContext_Querier,指的是查询的发起人,也就是AI角色自己,评分依据与相对于AI角色的距离相关。

这里我们需要修改的是过滤器,根据自己的需要修改参数,这里将过滤类型改成了最小,浮点值改成了500,即500cm外的位置才会被考虑进评分。

添加测试,简单修改细节面板

修改行为树

修改行为树,在上节课的基础上添加一个Run EQS Query,如下图所示

修改行为树

Run EQS Query的细节面板修改为下图所示。

此处的黑板键即为环境查询最后选择的位置,环境查询最终会修改我们这里选择的黑板键,即MoveToLocation;

查询模板即为我们刚才创建的Query_FindNearbyLocation,行为树将会执行Query_FindNearbyLocation;

运行模式可以选择单一最佳项目,但这里我推荐选择采自最佳25%的单一随机项,以增加AI的随机性。

另外注意,我将Move To Player节点的目标也改成了MoveToLocation,这样在执行完环境查询后,AI角色会向修改完成的MoveToLocation移动。

修改细节面板

运行测试

运行游戏,可以看到AI小兵满地乱跑。在我们当前的设置下,AI的行为树在执行到环境查询时,会在EnvQueryContext_Querier也就是AI小兵周围进行一次环境查询,在范围内选择一个最佳的点位,赋值给MoveToLocation。紧接着运行Move To Player结点,使AI角色移动到目标坐标上。

对准AI小兵点击'(冒号右边的那个按键),可以调出AI的debug界面,读者可以细细观察一下这个界面有哪些内容。

点击小键盘的3键,可以查看环境查询的结果,如图所示,角色的周围生成了三层圆环,每个环有八个查询点,蓝色的为查询失败,因为我们刚才设置过滤器的时候过滤了500cm以内的位置。绿色的为查询成功,他会根据距离对这个位置进行评分(绿点旁边的数字),在当前设置下分数越高则越优,最终会选择一个位置赋值给MoveToLocation。

AI的Debug界面

具体的查询生成器的各种类型、测试的各种类型以及细节面板的参数调整,读者可以自行进行实验。

注意,这个环境查询不会考虑不在导航网格内的情况,就像图中这样:

考虑的点位在导航网格外

如果最终选择的坐标在导航网格外,AI角色将会一直傻站在原地。这也是我之前建议选择采自最佳25%的单一随机项的原因,至少不会每次查询的结果一样导致AI卡死在导航网格的边缘。

当然,我们也可以设置环境查询只查询导航网格内的位置。如下图所示,

修改检测模式

将查询生成器细节面板-投射数据-检测模式修改为导航,这样就只会考虑导航网格体内的位置了。

自定义查询内容

简单入门EQS后,让我们回到实际应用上来。正如前两节课做的那样,我们并不想让环境查询生成在AI角色身边,而是生成在玩家角色的身边,这样才能实现AI角色向玩家角色移动。

在EQS里,控制环境查询生成位置的类叫做EnvQueryContext,之前提到的EnvQueryContext_Querier也是该类的对象。相应的,我们可以自定义Context,这里我们使用蓝图的方式创建一个EnvQueryContext_BlueprintBase,将其命名为QueryContext_TargetActor,用于获取玩家控制的角色。

创建蓝图

进入蓝图后,重载提供单一Actor函数

重载函数:提供单一Actor

节点的连接很简单,这里就不赘述了。在编译完成后,修改TargetActorKey的默认值为黑板键中的TargetActor,使其绑定我们的玩家角色。

蓝图节点,记得修改默认值

修改环境查询生成器的细节面板,使其以我们创建的QueryContext_TargetActor为中心。

修改居中(Center)

保存完毕后运行游戏,可以看见圆环现在生成在玩家角色的周围。由于显示是有一些延迟的,所以得等待一会儿才会更新。

环境查询的点围绕玩家控制的角色

优化AI(修改细节面板)

最后是添加更多更酷的小细节。在之前的设置里,环境查询会以玩家为中心生成三个圆环,事实上并不需要360°围绕玩家生成圆环,只需要在玩家和AI之间生成一道弧线即可。这里可以根据我们的喜好,修改内部半径和外部半径(外部半径可以考虑设置为攻击范围);设置弧形方向,各参数可以自行测试微调。

设置为弧形

为了让AI少跑点路,这里将得分因数设置为-1,离AI越近的位置得分将会越高。

修改得分因数

运行看看效果。可以看到AI和玩家之间生成了螺旋状的弧线。由于这个弧线效果笔者也不是很清楚是怎么生成的,读者可以自行实验调整,效果差不多就行。

修改后的位置图

我们还想实现一点更酷的东西。让AI小兵在进行一轮射击后可以自己换位置重新射击,这里我将Move To Sequence的装饰器删掉了,去除了必须在攻击范围外才能移动的限制。

在一轮射击结束后,可以移动位置

另外,在之前的设置里,即使AI和玩家之间有障碍物,AI也会尝试选取那些看不到玩家的位置,通常需要跑个几次才能看到玩家。为了优化这一点,在环境查询生成器里添加Trace测试内容,细节面板如图所示,注意要取消勾选布尔匹配。如果环境查询的位置与情景对象(也就是Context)有障碍物的话(也就无法进行射线追踪),则会将那一位置筛选出去,AI将不再尝试被筛选掉的位置。

设置可视性检测,与目标不可视的点都会被排除

可以看到,墙对面的点都变成了蓝色,表示不会被选取

最终效果&总结

这节课我们初步学习了EQS的使用,EQS可以很方便的为AI添加更丰富更智能的行动,将会是很有用的一个功能。

此外,斯坦福的老师还使用了可视化记录器这一工具,可以在窗口->开发者工具里找到,感兴趣的读者可以自行去学习使用。

参考链接

UE4 行为树与EQS https://www.cnblogs.com/biu-we/p/13604795.html

斯坦福 UE4 C++ ActionRoguelike游戏实例教程 03.EQS初体验:从智障到智慧的更多相关文章

  1. 《Genesis-3D开源游戏引擎--横版格斗游戏制作教程03:碰撞检测》

    3.碰撞检测 碰撞检测的概述: 碰撞在物理学中表现为两粒子或物体间极端的相互作用.而在游戏世界中,游戏对象在游戏世界自身并不受物理左右,为了模拟真实世界的效果,需要开发者为其添加属性,以模拟真实事件的 ...

  2. Angular2入门系列教程2-项目初体验-编写自己的第一个组件

    上一篇 使用Angular-cli搭建Angular2开发环境 Angular2采用组件的编写模式,或者说,Angular2必须使用组件编写,没有组件,你甚至不能将Angular2项目启动起来 紧接着 ...

  3. Cocos2d-x3.0游戏实例《不要救我》第十篇(结束)——使用Json配置数据类型的怪物

    如今我们有2种类型的怪物,并且创建的时候是写死在代码里的,这是要作死的节奏~ 所以.必须可配置.不然会累死人的. ; i < size; ++i) { int id = root[i][&quo ...

  4. Cocos2d-x3.0游戏实例之《别救我》第八篇——TiledMap实现关卡编辑器

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/musicvs/article/details/25368273 好吧.我真心全然搞不懂.我如今仅仅只 ...

  5. 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇:简介及目录》(附上完整工程文件)

    G-3D引擎2D射击类游戏制作教程 游戏类型: 打飞机游戏属于射击类游戏中的一种,可以划分为卷轴射击类游戏. 视觉表现类型为:2D 框架简介: Genesis-3D引擎不仅为开发者提供一个3D游戏制作 ...

  6. Unity-2017.3官方实例教程Space-Shooter(一)

    由于初学Unity,写下此文作为笔记,文中难免会有疏漏,不当之处还望指正. Unity-2017.3官方实例教程Space-Shooter(二) 章节列表: 一.从Asset Store中下载资源并导 ...

  7. Python导出Excel为Lua/Json/Xml实例教程(一):初识Python

    Python导出Excel为Lua/Json/Xml实例教程(一):初识Python 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出 ...

  8. Web 开发中应用 HTML5 技术的10个实例教程

    HTML5 作为下一代网站开发技术,无论你是一个 Web 开发人员或者想探索新的平台的游戏开发者,都值得去研究.借助尖端功能,技术和 API,HTML5 允许你创建响应性.创新性.互动性以及令人惊叹的 ...

  9. 值得 Web 开发人员收藏的20个 HTML5 实例教程

    当开始学习如何创建 Web 应用程序或网站的时候,最流行的建议之一就是阅读教程,并付诸实践.也有大量的 Web 开发的书,但光有理论没有实际行动是无用的.现在由于网络的发展,我们有很多的工具可以用于创 ...

  10. BPEL 实例教程

    http://www.oracle.com/technetwork/cn/articles/matjaz-bpel1-090722-zhs.html BPEL 实例教程 作者:Matjaz Juric ...

随机推荐

  1. 其它-Supervisor的使用

    文章目录 Supervisor 的使用 一 Supervisor介绍 二 安装 2.1 安装方式 2.2 验证 2.3 配置 2.4 配置详情(了解) 2.5 启动.停止.重启 三 program 配 ...

  2. linux的认知与基本命令

    一.linux的了解 1. 什么是Linux?       a,Linux是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯·本纳第克特·托瓦兹于1991年10月5日首次发布.它主要受到Mi ...

  3. D 算法模板(Boruvka's Algorithm)

    Description 为了方便你测试,本题为D题简化版. You are given a complete undirected graph with nn vertices. A number a ...

  4. CF431C

    题目简化和分析: k叉树,乍一看好像是树论,但我们通过分析条件,发现它每个阶段要做的事情一样,皆为:\(1\sim k\) 中选数字,这就很明显是DP. \(\mathit{f}_{i,0}\) 表示 ...

  5. CF1336A

    题目简化和分析: 明确一点这是一棵树. 为了保证每个工业城市的设置效益最大,应该设在最深的节点. 从深到浅,可以使用优先队列去实现. 设置一个的价值为 \(dep_u-siz_u-1\). 关于作者一 ...

  6. Java多线程编程的优点和缺点

    优点: 加快响应用户的时间:多线程允许并发执行多个任务,可以充分利用多核处理器,从而提高程序的性能和响应速度.比如我们经常用的迅雷下载,都喜欢多开几个线程去下载,谁都不愿意用一个线程去下载,为什么呢? ...

  7. Eolink Apikit 如何进行自动化测试?

    自动化测试是一种软件测试方法,利用自动化工具和脚本来执行测试用例,以验证软件应用程序的功能.性能.稳定性等特性.自动化测试的主要目的是提高测试效率.减少测试成本,并确保软件的质量和可靠性. 作为测试人 ...

  8. RSA总结 From La神

    常用工具 分解大素数 factordb (http://www.factordb.com / API: http://factordb.com/api?query=) yafu (p q 相差过大或过 ...

  9. Xmind思维导图工具2023最新专业版破解思路

    工具介绍 XMind 是一款最为流行的专业级思维_导图_制作与编辑软件,它现在在全球范围内都已极具名气,可谓是办公.学习.团队交流必备工具之一. 准备工作 1,官方Xmind软件 2,一个心意的编辑器 ...

  10. Java代码审计之目录穿越(任意文件下载/读取)

    一.目录穿越漏洞 1.什么是目录穿越 所谓的目录穿越指利用操作系统中的文件系统对目录的表示.在文件系统路径中,".."表示上一级目录,当你使用"../"时,你正 ...