场景查询系统用户指南

此文档介绍了行为树中场景查询系统的界面和最常用的工作流。

Windows
MacOS
Linux

启用场景查询系统

  1. 编辑菜单(Edit Menu) -> 编辑器偏好(Editor Preferences)

  2. 实验性功能(Experimental)

  3. 向下滚动到 AI

  4. 启用 场景查询系统

场景查询的各部分

一个 场景查询 实际上由多个部分组成。必须从行为树调用一个场景查询,之后实际的场景查询将使用其生成器(Generator)、引用其情境(Context),并使用其测试(Test)为行为树提供最高的加权结果。

行为树

通过 Run EQS Query 任务节点即可在行为树中使用场景查询。

runEQS.png

在行为树中将其选中即可设置 查询模板(Query Template) 属性(场景查询资源)、设置其 查询参数(Query Params) 属性(即为传入场景查询资源的命名数值),以及设置最高加权结果返回的黑板键(对象或矢量)。

runEQS_details.png

如需了解其使用的详细内容,请查阅行为树文档。

场景查询

使用 Run EQS Query 节点在行为树中调用的是场景查询资源,以便对多个Actor或位置进行测试,找到最佳选择。而“最佳”的定义取决于测试(Test)在场景查询中的构成方式。

场景查询(Environment Query)可在蓝图和C++中创建。

生成器

生成器(Generator) 生成位置或Actor(统称为 项目)。它们将被测试和加权,最高加权的位置或Actor将被返回到行为树。

生成器(Generator)可在蓝图和C++中创建。

情境

情境(Context) 是诸多测试和生成器的参考框架。它们可能像 查询器(Querier) 一样简单,也可能像 一种类型的所有Actor 那样复杂。

需要注意的是生成器(如简单网格生成器)可使用返回多个位置或Actor的情境。这将在每个情境的位置创建一个拥有特定尺寸和密度的简单网格。

情境(Context)可在蓝图和C++中创建。

测试

场景查询通过测试(Test)来确定生成器中的哪个项目为“最佳”。默认测试包含较大比例的使用情况,如项目是否能追踪至另一个位置,或项目和情境之间的距离是否处于特定范围内。

当前版本中,测试(Test) 必须在C++中创建,当前其没有可通过蓝图实现的版本。

创建查询

newQuery.png

  1. 在内容浏览器中 左键点击 创建(Create) 按钮

  2. 选择 杂项(Miscellaneous) -> 环境查询(Environment Query)

创建蓝图情境

  1. 在内容浏览器中 左键点击 创建(Create) 按钮

  2. 选择 蓝图(Blueprint)

  3. 点开 所有类(All Classes)

  4. 搜索 EnvQueryContext

  5. 选择 EnvQueryContext_BlueprintBase

创建蓝图生成器

  1. 在内容浏览器中 左键点击 创建(Create) 按钮

  2. 选择 蓝图(Blueprint)

  3. 点开 所有类(All Classes)

  4. 搜索 EnvQueryGenerator

  5. 选择 EnvQueryGenerator_BlueprintBase

将Root和Generator连接起来

connectRootToGen.png

点击左键,从Root节点下方的深色条 拖动 至Generator节点上方的深色条,构成连接。

此外,左键单击拖动 进图表区中也将出现新建Generator节点的选项。

虽然可以在Root节点上连接多个Generator节点,但只有最左边的有效Generator才会用于查询中。

为行为树添加查询

通过 Run EQS Query 任务节点即可在行为树中使用场景查询。

runEQS.png

  1. 在行为树图表区中 点击右键

  2. 创建一个 Task -> Run EQSQuery 节点。

  3. 选择新建的 Run EQSQuery 节点,将 查询模板(Query Template) 属性改为您的场景查询资源(或在下拉菜单中新建一个资源)。

  4. 可根据需求选择性地设置场景查询寻找的 查询参数(Query Params)

  5. 最后,选择场景查询设置的黑板键,此处仅限使用对象和矢量黑板键。

编辑查询

添加生成器

  1. 在查询的图表区中点击右键,选择一个生成器。

addGenToQuery.png

添加测试

  1. 右键点击生成器并选择添加一个测试。

addTest.png

修改测试

  1. 在生成器上选择一个测试,并在 细节 面板中进行修改

editTest.png

请参阅场景查询系统节点参考中的个体测试使用信息。

预览查询结果

场景查询系统测试Pawn文档中可查阅到如何预览查询结果。

testingPawnBanner.png

编辑情境

新建的EnvQueryContext蓝图拥有4个可实现函数:

  • 提供单一位置

  • 提供单一Actor

  • 提供位置集

  • 提供Actor集

应用一个(或多个)函数可创建您的自定义情境,以便在查询的测试中使用。右键点击需要实现的函数,然后选择 实现函数(Implement Function)

implementableFunctions.png

提供单一位置

返回一个单一位置(矢量)。如何生成位置由您决定。举例而言,此函数将返回查询器1500厘米内随机Actor(DesiredObjectType排列中的类型,如Pawn、载具等)的追踪命中位置。

提供单一Actor

返回一个单一Actor。如何找到该Actor由您决定。在此例中,函数将返回玩家0控制的(拥有的)Actor:

提供位置集

返回位置的排列(矢量)。如何生成这些位置由您决定。此范例图表将从半径为1500个单位的圆上16个平均分布的位置处进行追踪,返回成功的场景命中。

提供Actor集

返回一个Actor的排列。如何找到这些Actor由您决定。举例而言,此函数将返回 MyCharacter Actor的一个排列,其变量 Team Number 设为 1

编辑生成器

Event Do Item Generation

implementDoItem.png

这是生成器的主函数。实现此函数时将获得一个位置的排列,这些位置是从场景查询传入的情境位置。这完全取决于情境,它可能只是查询器位置条目的排列,也可能是关卡中每个体力回复包的所在位置。

添加生成的Actor

AddGenActor.png

因为函数只能返回一个值,“Do Item Generation”函数实际拥有2个排列,可巧妙地把它们传回到场景查询。此节点将添加一个Actor到Actor返回排列,也可与Add Generated Vector节点共用,返回位置数值。

生成器将基于从EnvQuery节点设置的黑板键来定义实际传回行为树的内容。

添加生成的矢量

AddGenVec.png

因为函数只能返回一个值,“Do Item Generation”函数实际拥有2个排列,可巧妙地把它们传回到场景查询。此节点将添加一个矢量到矢量返回排列,也可与Add Generated Actor节点共用,返回Actor数值。

生成器将基于从EnvQuery节点设置的黑板键来定义实际传回行为树的内容。

范例生成器

它从一个圆的边沿开始向查询器追踪,此圆的半径为 Rad。它基于 辐条数量(Number of Spokes) 值将追踪以一定角度分隔开(为360/辐条数量)。追踪命中场景时才会保存其位置,本质上是寻找一个无法看到调用者的表面。

最终效果类似于下图:

customGenOutput.png

此范例应该执行操作是:使用从 Do Item Generation 传入的 情境位置(Context Locations) 对圆的生成位置进行修改。由于图像尺寸限制,此操作未能完成。

欢迎来到全新虚幻引擎4文档站!

我们正在努力开发新功能,包括反馈系统,以便您能对我们的工作作出评价。但它目前还未正式上线。如果您对此页面有任何意见与在使用中遭遇任何问题,请前往文档反馈论坛告知我们。

新系统上线运行后,我们会及时通知您的。

发表反馈意见