14.构建行为树

现在构建行为树的所有部件都已准备就绪:

DoneBehaviorTree.jpg

我们来看看存在哪些逻辑。

  • 检测到 Pawn 是 AI 角色时,AI 不会开始行动。

  • AgroCheck Service 将不断寻找符合条件的目标。

  • 发现目标后,最左边的分支打开,AI 开始追赶目标 Pawn

  • Pawn 之间的距离足够近之后,分支将阻止行动继续执行,而将其返回至图表顶端。

  • 如目标 Pawn 隐藏,将运行最右边的分支,使 AI 向目标 Pawn 的最后已知位置前进。

  • 到达此位置后,AI 将等待,然后返回出发地。

  • 在任何时候,一旦发现符合条件的目标,最右边的分支将强制停止执行,最左边的分支将被打开。

一起来看看如何创建行为树。

步骤

基础设置

该指南第八部分中应该已经执行过此操作,以防您未保存,再次梳理一遍创建行为树基础架构的步骤。

  1. 如果行为树资源还没有打开并处于编辑状态,在 内容浏览器双击 打开进行编辑。

  2. 切换至行为树模式

    btMode.png

  3. 在最初编辑行为树时,它只有 Root 节点:

    root.png

  4. 可在图表编辑器中 单击右键 创建节点

    1. 添加一个 Composites -> Sequence 节点。

      sequence.jpg

    2. 添加两个 Composites -> Selector 节点。

      selector.jpg

  5. 将 Root 节点和 Selector 节点之一连接起来。

    connectNodes.jpg

  6. 将新连接的 Sequence 节点和 Selector 节点,以及其他 Sequence 节点连接起来。按此方法进行整理:

    connectNodes2.jpg

    第二个 Selector 节点在左边,Sequence 节点在右边。

添加 Service 节点

  1. 使用最上方 selector 节点上的 右键单击 快捷菜单,添加一个 Services -> Agro Check 节点。

    addAgro.png

  2. 选择 Selector 节点上的 Agro Check 框,然后使用 Details 面板将 Target to Follow 属性设为 TargetToFollowTarget Location 设为 TargetLocation、将 Interval 调至 0.5、Random Deviation 调至 0.0。

    setAgroCheck1.jpg

添加 Tasks

  1. 在图表区域中 单击右键 打开快捷菜单,然后添加 4 个 Tasks:1 个 Rapid Move To 节点、1 个 Wait 节点、2 个 Move To 节点。

    addTaskNodes.png

  2. 将偏下方的 Selector 和 Rapid Move To 节点连接起来。

  3. 将 Sequence 节点和两个 Move To 节点,以及 Wait 节点连接起来。

  4. 按以下方式排列节点:

    connectedTasks.png

    从左至右:Rapid Move ToMove ToWaitMove To

  5. 选择最左边的 Move To 节点,然后使用 Details 面板将其 Blackboard Key 属性设为 TargetLocation

  6. 将最右边 Move To 节点上的 Blackboard Key 属性设为 HomeLocation

    adjustMoveTo.jpg

  7. 选择 Wait 节点,然后使用 Details 面板将 Wait Time 属性设为 2.5

    adjustWait.jpg

  8. 选择 RapidMoveTo 节点,然后使用 Details 面板将 Target to Follow 属性设为 TargetToFollow

添加 Decorators 节点

  1. 在偏下方的 Selector 节点上 单击右键,选择 Add Decorators..-> Blackboard

  2. 在偏下方的 Selector 节点上 单击右键,选择 Add Decorators..-> Close Enough

    addDecorator1.jpg

  3. 黑板 decorator 上的 Observer Aborts 属性设为 BothKey Query 设为 Is SetBlackboard Key 设为 TargetToFollow

  4. Close Enough decorator 上的 Acceptable Distance 属性设为 100.0、Target to Follow 属性设为 TargetToFollow

    setBB1.jpg

  5. Sequence 节点上 单击右键,选择 Add Decorators..-> Blackboard

  6. Sequence 节点上 单击右键,选择 Add Decorators..-> Is At Location

  7. Sequence 节点上 单击右键,选择 Add Decorators..-> Blackboard

    添加全部 decorators 后,整个节点块的外观如下:

    addToSeqNode.png

  8. 在第一个 黑板 decorator 上,将 Key Query 设为 Is Not SetBlackboard Key 设为 TargetToFollow

  9. 在第二个 黑板 decorator 上,将 Key Query 设为 Is SetBlackboard Key 设为 TargetLocation

  10. Is At Location decorator 上,启用 Inverse Condition 属性并将 Blackboard Key 设为 HomeLocation

    对这些属性进行设置后,整个节点块的外观如下:

    propsSet.png

大功告成!使用 Play in Editor 时打开 行为树 编辑器可以看到树的运行方式。玩家进入判定区域中 AI 的视线时,它将开始追赶玩家。如 AI 视线受阻,它将前往玩家的最后已知位置、等待、然后回到出发点。