【AI 笔记】UE5 行为树 (Behavior Tree) 终极手册

一、 AI 运作的核心“三大件”

在 UE5 中,让一个 AI 动起来并具备逻辑,需要三个核心组件协同工作:

  • AI 控制器 (AI Controller) —— 灵魂
    • 定位:附身在敌人模型(Pawn/Character)上的大脑载体。它负责驱动移动组件,并启动行为树。
  • 黑板 (Blackboard) —— 记忆与感知
    • 定位:AI 的“数据库”。存放着 AI 做决策需要用到的所有变量数据(例如:目标玩家的位置、当前血量、巡逻点坐标、是否处于激怒状态等)。
    • 注意:行为树本身不存数据,它只做逻辑判断。所有数据读取和写入都在黑板中进行。
  • 行为树 (Behavior Tree, BT) —— 逻辑与决策
    • 定位:AI 的“思维导图”。它不断读取黑板里的数据,根据设定好的规则,决定下一步该执行什么动作。

二、 行为树的四大基础节点

行为树的执行逻辑是从上到下、从左到右的。树干上挂载着不同颜色的节点,它们各司其职:

1. 复合节点 (Composites) —— 控制流向的“交通灯”

负责决定分支逻辑怎么走,最常用的有三个:

节点名称 逻辑类型 核心机制 实战应用
选择器 (Selector) “或者 (OR)”逻辑 从左到右执行子节点。只要有一个子节点执行成功,它就会向父节点汇报成功,并停止后续执行。如果失败,就试下一个。 优先级系统。最左边放最高优先级的事(比如逃跑/回血),中间放攻击,最右边放优先级最低的事(闲逛巡逻)。
序列 (Sequence) “并且 (AND)”逻辑 从左到右执行子节点。必须所有子节点都执行成功,它才算成功。只要有一个失败,整个序列立刻中断并宣告失败。 步骤性动作。例如:寻找掩体 ➡️ 移动到掩体 ➡️ 转身瞄准 ➡️ 射击。中间任何一步(比如找不到掩体)失败,后续动作全部取消。
简单平行 (Simple Parallel) “一心二用”的并行处理 允许 AI 同时执行两件事。包含一个**“主任务 (Main Task)”(必须是单一节点)和一个“后台树 (Background Tree)”**。当主任务完成时,该节点结束,可选择立刻掐断或等待后台树结束。 移动射击 / 移动举盾。例如让 Boss 一边向玩家移动(主任务),一边在后台持续播放举盾防守的动画(后台树)。

2. 任务节点 (Tasks) —— 具体的“手脚动作” (紫色节点)

定位:树的最末端叶子,真正执行游戏逻辑的地方。

【内置常用节点分类大全】

节点大类 节点名称 核心作用 用法细节 & 备注
🏃‍♂️ 移动与朝向类 (控制躯壳位移与视线) Move To (移动到) 让 AI 移动到黑板中指定的坐标 (Vector) 或物体 (Actor) 处 。 底层依赖 NavMesh (导航网格);建议调整 Acceptance Radius (可接受半径) 防止 AI 在终点原地抽搐 。
Rotate to face BB entry (旋转以朝向黑板条目) 让 AI 原地转身,正面朝向黑板里指定的目标 。 一次性动作。通常接在 Move To 到位后、Play Anim 前使用,防止怪物背对玩家空挥 。
Set / Clear Default Focus (设置/清除默认焦点) 锁定 AI 控制器的“注意力”,让 AI 身体死死锁定在目标身上 。 持续性状态。调用设置后会一直生效,AI 会持续盯着目标,直到调用 Clear 清除该焦点 。
⏱️ 时间与控制类 (控制逻辑节奏与结果) Wait (等待/发呆) 让 AI 强制什么都不做,原地停留设定好的时间 。 可以在面板中添加随机偏差时间,让行为更自然 。
Wait Blackboard Time (等待黑板时间) 读取黑板里的 Float 变量作为等待的秒数 。 神级节点,非常适合用来制作动态受击硬直
Finish With Result (以结果结束) 强制让当前所在的分支返回 Success 或 Failure 。 常配合 Selector (选择器) 来控制流程,或者在早期开发时用于逻辑调试 。
🧠 感知与策略类 (与引擎其他系统联动) Make Noise (制造噪音) 在当前位置发射声音事件,触发其他 AI 的听觉感知组件 。 实战应用:比如设置 Boss 吼叫动作时触发,用来唤醒全场小怪 。
Run EQS Query (运行 EQS 查询) 呼叫环境查询系统寻找最佳战术位置,算出坐标并写入黑板 。 典型的找掩体/绕背逻辑,算出坐标后通常紧接 Move To 节点跑位 。
🗂️ 结构与嵌套类 (管理庞大的行为树) Run Behavior (运行子行为树) 直接在当前位置插入并运行另一棵行为树 。 用于保持主树整洁。比如把复杂的“攻击连招”单独做一棵树,在这里调用 。
Run Behavior Dynamic (运行动态行为) 在游戏运行期间,通过底层代码动态替换要执行的子树 。 高阶应用:比如 Boss 进二阶段后,从近战模式树瞬间切换为远程法师模式树 。
🎬 通用动作类 Play Animation (播放动画) 让角色直接播放一个基础的动画序列 。 适用于无需复杂通知或判定的简单动作表现 。

【自定义扩展:Custom Task 蓝图实战避坑指南】

  • 核心机制:通过蓝图创建自定义 Task(如 Task_施放重击),内部调用蒙太奇或触发 GAS 技能。

  • 致命踩坑点:逻辑可以 用Event Receive Execute AI 开始;任务末尾绝对必须连上 Finish Execute (完成执行) 节点并勾选 Success!如果不加,大脑会永远卡在这个节点死机。

3. 装饰器 (Decorators) —— 节点上的“条件锁” (蓝色节点)

  • 🛡️ 装饰器 (Decorators) 基础概念

    • 定位 (核心作用):附加在复合节点或任务节点上,充当 If 判断的“条件锁”。条件不满足时,下方节点将被拦截,不允许执行。
    • 实战应用:在“攻击”节点上挂载黑板条件(Blackboard Based Condition):设定“距离玩家 < 3米”。满足该条件,AI 才会真正挥刀。
    • 核心机制动态监控与打断系统(行为树的“保安”)。装饰器不仅能挡住入口,还能持续在后台监视数据变化。这套系统由以下两个核心设置完美配合:

    机制一:Notify Observer (通知观察者)

    核心问题:什么时候敲响警报?

    触发模式 推荐度 核心机制 特点与避坑指南
    On Result Change (结果改变时) 推荐 只有在条件判断的真/假结果发生翻转时(如:距离从满足 <3米 变成不满足 >3米),才触发警报。 最节省性能,逻辑最稳。是绝大多数实战情况下的首选默认配置。
    On Value Change (值改变时) 🚨 慎用 只要黑板里的数值发生任何微小跳动(如:距离从 2.9米 变成 2.8米),就会强行触发警报。 极其敏感。如果配合打断机制使用,极易导致 AI 因为数值微调而被频繁打断,产生原地抽搐 Bug

    机制二:Observer Aborts (观察者中止)

    核心问题:警报响了,踢飞谁?(打断谁的执行流)

    打断模式 执法范围 核心机制与实战应用
    None (无) 不打断 不打断任何人。即使监控的条件已经改变,也会乖乖等当前的节点动作做完再说。
    Self (自身) 仅限本分支 只能打断自己所在的通道。 💡 实战应用:【目标丢失立刻停手】。一旦发现玩家隐身,立刻打断自己当前正在进行的追击动作。
    Lower Priority (较低优先级) 跨分支执法 (动作游戏神技) 拥有跨分支打断权,踢飞右侧所有低优先级分支。 💡 实战应用:【残血瞬间防守】。将其放在最左侧的高优先级分支上。一旦血线跌破阈值,强行踢飞右侧正在执行的所有低优先级动作,瞬间把逻辑拉回左侧保命。
    Both (两者都) 本分支 + 右分支 既能打断自己(Self),也能打断右边优先级较低的分支(Lower Priority)。

4. 服务节点 (Services) —— 后台的“雷达” (绿色节点)

  • 定位:挂载在复合节点上。只要该节点及其子节点在运行,服务节点就会按设定频率(Tick)在后台循环执行。
  • 实战应用:动态更新数据。例如挂载 Service_更新玩家距离,当 AI 追击时,每 0.5 秒计算一次玩家最新位置写入黑板,确保方向正确。