12.创建 FindHidingSpot EQS
该步骤需要创建更为复杂的场景查询。将创建一个点网格投射到寻路网格体上,然后通过一系列测试找到最佳的藏身之处。部分测试将完全剔除掉不理想的位置,如处于玩家角色视线(Trace)中的位置,其他将基于寻路网格体是否可到达(PathFinding)权衡潜在的隐藏点,或玩家角色前有多少点存在(Dot Product)。
小提醒:
生成器(Generator)创建与 Context 有关的项目(Item)
测试中使用的项目通常与 Context 有关(项目 X 到 Context Y 有多远)
基于测试结果对项目进行剔除和评分
步骤
首先,在 内容浏览器 中 双击 FindHidingSpot 场景查询资源。
创建 Simple Grid 生成器并将其和 Root 节点连接起来。
选择 Simple Grid 生成器并在 Details 面板中设置以下属性:
Grid Size = 2000.0
Space Between = 150.0
Navigation Filer = RecastFilter_UseDefaultArea
Project Down = 2048.0
Post Projection Vertical Offset = 32.0
网格生成器的这些设置将创建大小可调,便于管理的多个项目,便于查询进行测试。如 AI 需要在其上方或下方进行寻找,Project Down、Project Up 和 Post Projection Vertical Offset 属性均十分便于进行变更。
右键单击 Simple Grid 节点并选择 Tests Distance 添加 2 个 距离 测试
选择第一个测试,在 Details 面板中调整下列属性:
Distance To = Player Context
Test Purpose = Score Only
此距离测试将为离玩家 更远 的项目赋予更高分数。
选择第二个测试,在 Details 面板中调整下列属性:
Test Purpose = Score Only
Scoring Equation = Inverse Linear
Scoring Factor = 2.0
此距离测试将为更靠近 AI 的项目赋予更高分数,较之前的 距离测试 权重更多,意味着它愿意靠近 AI,但仍然会选择远离玩家。
右键单击 Simple Grid 节点并选择 Tests Trace 添加 2 个 Trace 测试
选择一个 Trace 测试并在 Details 面板中将 Context 改为 PlayerContext(之前在此快速入门中创建的 Context):
我们将移除处于玩家 Pawn 或 AI pawn 视线中的项目。此外,您可能会担心该测试会在一系列的 Distance 测试后进行,但实际上无需担心 - 场景查询将无视此处的排序率先运行 Trace 测试。此外,其他 Trace 也无需进行额外设置。
右键单击 Simple Grid 节点并选择 Tests Dot 添加 1 个 Dot 测试
选择 Dot 测试,在 Details 面板中调整下列属性:
Line A - Rotation = PlayerContext
Line B - Line From = PlayerContext
Absolute Value = True
Test Purpose = Score Only
Scoring Factor = -1.0
此处需要一些技巧,最高层上描述的是“偏好位于玩家 Pawn 两侧的项目”,但其工作方式稍显另类。Dot Product 函数将返回 2 个矢量在 1.0(完全相同)到 -1.0(完全相反)尺度上的相似度。因此,如果 Dot Product 的 绝对值 在玩家的旋转矢量和玩家到项目的矢量之间,则会偏好玩家前后的点。但如果将 Scoring Factor 设为 -1.0,则会偏好玩家两侧的点。
右键单击 Simple Grid 节点并选择 Tests PathFinding 添加 1 个 PathFinding 测试
选择 PathFinding 测试,在 Details 面板中将 Test Purpose 设为 Score Only:
仅供编辑!最终的场景查询与下图相似: