Documentation
¶
Overview ¶
Package behaviortree 提供泛型行为树原语,用于游戏 AI 决策(小兵/怪物/NPC)。
解决的问题:FSM 处理线性状态转换简洁,但复杂 AI(MOBA 小兵"追击→攻击→ 撤退→巡逻"且可被打断)用 FSM 会变成意大利面状的状态爆炸。行为树通过树形 结构组合「条件检查」和「动作执行」,天然支持优先级打断与多帧异步任务。
与相邻原语的关系:
- fsm 适合「生命周期状态流转」(房间、订单),行为树适合「每帧 AI 决策」;
- gameloop/match 的 OnTick 内对每个 AI 实体调用 root.Tick(ctx);
- 行为树不管 tick 调度——它是纯同步的"给定上下文,返回状态",调度在 gameloop。
核心设计(机制而非策略):
- 三种状态:Running(进行中)、Success(成功)、Failure(失败);
- 四种节点:Sequence(顺序)、Selector(选择)、Parallel(并行)、Decorator(装饰);
- 叶子节点由业务定义(Action/Condition),本包只提供组合机制;
- 泛型参数 T 是黑板(Blackboard)类型——AI 的共享上下文(目标位置、血量等), 业务自定义结构体,行为树只透传。
并发安全:Tick 本身不加锁(每个 AI 实体独立调用);节点定义(树结构)构建后只读。 零值不可用:用 Sequence/Selector/Parallel 等构造函数组装树。
Index ¶
- type Action
- type Condition
- type Node
- func Cooldown[T any](ticks int, child Node[T]) Node[T]
- func Guard[T any](cond func(bb *T) bool, child Node[T]) Node[T]
- func Inverter[T any](child Node[T]) Node[T]
- func MemSelector[T any](children ...Node[T]) Node[T]
- func MemSequence[T any](children ...Node[T]) Node[T]
- func Parallel[T any](policy ParallelPolicy, children ...Node[T]) Node[T]
- func RepeatUntilFail[T any](child Node[T]) Node[T]
- func Repeater[T any](n int, child Node[T]) Node[T]
- func Selector[T any](children ...Node[T]) Node[T]
- func Sequence[T any](children ...Node[T]) Node[T]
- func Succeeder[T any](child Node[T]) Node[T]
- type ParallelPolicy
- type Status
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Node ¶
Node 是行为树的节点接口。T 是黑板类型(业务自定义的 AI 上下文)。
func Cooldown ¶
Cooldown 冷却装饰器:子节点执行成功后,在 ticks 次 Tick 内跳过执行(返回 Failure)。 适合"技能 CD"或"巡逻间隔"等需要冷却的 AI 行为。 非并发安全(每个 AI 实体独占)。
func MemSelector ¶
MemSelector 记忆型选择节点:从上次返回 Running 的子节点继续。
func MemSequence ¶
MemSequence 记忆型顺序节点:从上次返回 Running 的子节点继续,而非每次从头。 适合多帧动画/寻路等需要跨 Tick 连续执行的场景。 非并发安全(每个 AI 实体独占)。
func Parallel ¶
func Parallel[T any](policy ParallelPolicy, children ...Node[T]) Node[T]
Parallel 并行执行所有子节点(每次 Tick 全部都执行),按 policy 判定结果。 常用于"一边移动一边攻击"等并发行为。
func RepeatUntilFail ¶
RepeatUntilFail 重复执行子节点直到返回 Failure,然后返回 Success。 子节点返回 Running 时暂停,下次 Tick 继续。
func Repeater ¶
Repeater 重复执行子节点 n 次。子节点返回 Failure 时提前中止并返回 Failure; 子节点返回 Running 时暂停本次迭代,下次 Tick 继续当前迭代。 n <= 0 表示无限重复(只能被 Failure 中止)。 非并发安全(每个 AI 实体独占)。
func Selector ¶
Selector 选择执行子节点:依次 Tick 每个子节点,任一返回 Success 则立即返回 Success;任一返回 Running 则返回 Running;全部 Failure 则返回 Failure。 语义等价逻辑 OR(优先级选择)。
type ParallelPolicy ¶
type ParallelPolicy int
ParallelPolicy 定义 Parallel 节点的成功/失败判定策略。
const ( // RequireAll 所有子节点 Success 才 Success(任一 Failure 即 Failure)。 RequireAll ParallelPolicy = iota // RequireOne 任一子节点 Success 即 Success(全部 Failure 才 Failure)。 RequireOne )