节点类型与执行机制

行为树的表面是"一棵树",本质是一套带返回值的执行协议。每种节点有自己的职责和返回值语义。

四种核心节点

节点 职责 典型例子
复合节点(Composite) 决定怎么执行子节点 Selector(选一个成功的)、Sequence(依次全部成功)
装饰器(Decorator) 条件守卫,决定节点能否执行 "有敌人吗"、"血量低于 30% 吗"
任务节点(Task) 具体做一件事,返回成功 / 失败 "移动到目标"、"播放攻击动画"
服务节点(Service) 周期性执行(挂在复合节点上) "每隔 0.5 秒刷新最近敌人"

执行规则:Selector vs Sequence

复合节点 子节点执行顺序 何时返回成功 何时返回失败
Selector 从左到右依次尝试 任一子节点成功 全部子节点失败
Sequence 从左到右依次执行 全部子节点成功 任一子节点失败
(Parallel) 同时执行多个 按配置(全部成功 / 主任务成功即终止) 按配置

一个经典结构:

Selector(任一成功即可)
├ Sequence(巡逻链:满足条件 → 走到点 → 等待)
├ Sequence(追击链:看到敌人 → 追上 → 攻击)
└ Task(原地待命)

左边放优先级高的行为:追击排在巡逻前,所以 Selector 每次都会先试追击分支——试不成功(装饰器拦住了)才退回巡逻。

装饰器与服务的配合

  • 装饰器是"条件":不通过则整条分支不执行(行为树的中断机制会让正在进行的行为立刻停止);
  • 服务是"刷新":周期性更新黑板上的条件数据("最近敌人是谁"),供装饰器读。

注意:服务的执行间隔(Tick Interval)直接决定 AI 的反应速度与开销,默认 0.5 秒是平衡值,不要无故调到 0.05 秒。

行为树的中断(Interrupt)

行为树的精华机制:当高优先级分支的条件满足时(如巡逻中突然看到敌人),它会打断当前正在执行的低优先级行为。这是行为树"看起来自然"的核心。配置中断的关键概念是 NotifyObserver / Observer Abort:装饰器条件变化时要通知哪个范围的节点中断。设错了,AI 会出现"看到敌人还继续巡逻走完"的迟钝表现。