boxmoe_header_banner_img

菜就多练喵

文章导读

[Unity][C#]手撕行为树01——概述


avatar
Ib_Mccf 2026年2月28日 16

以下由AI提供

行为树是什么?

行为树是一种用于控制智能体(如游戏中的 NPC、机器人或自动驾驶系统)决策逻辑的分层模型。它最早由游戏行业(如《光环》系列)发扬光大,现在已成为游戏开发和机器人控制领域的主流 AI 框架。

从结构上看,它是一棵由节点组成的树状图。执行时,系统会定期从根节点开始遍历(称为 Tick),通过特定的逻辑规则决定当前应该执行哪个具体动作。

核心机制:三个返回值
每一个节点在被执行后,必须向父节点返回以下三种状态之一:

Running (运行中):任务尚未结束,下一帧需要继续执行(这是行为树处理“时间跨度任务”的关键)。

Success (成功):任务已顺利完成。

Failure (失败):任务无法完成或条件不满足。

行为树有什么用?

行为树主要用于解决**“在特定环境下,AI 应该做什么以及如何切换动作”**的问题。

分层状态切换:替代传统的、难以维护的复杂状态机。

游戏 AI 逻辑:控制怪物的巡逻、追踪、逃跑、攻击等行为。

复杂任务拆解:将一个宏大的目标(如“摧毁敌军基地”)拆解为一系列小的可执行动作(如“搜集资源” -> “建造兵营” -> “训练士兵” -> “发起进攻”)。

机器人控制:在工业自动化或家用机器人(如扫地机)中,处理感知环境后的逻辑反馈。

行为树的组成

行为树通常由以下四类节点组成:

Action (动作):具体行为(如“播放攻击动画”、“移动到坐标点”)。

根节点 (Root):树的入口,每一轮 Tick 的起点。

复合节点 (Composites):控制流向。

Selector (选择器):只要有一个子节点成功就返回成功(类似“或”逻辑,用于尝试多个方案)。

Sequence (顺序器):所有子节点都必须成功才返回成功(类似“与”逻辑,用于按步执行)。

装饰节点 (Decorators):修饰逻辑。

如:限制执行次数、取反结果、循环执行、超时控制等。

叶子节点 (Leaves):最末端。

Condition (条件):判断环境(如“玩家是否在范围内?”)。

行为树的特点

① 高度的模块化与复用性 (Modularity)

行为树的每个分支都可以看作一个独立的“子树”。你可以像搭积木一样,把“找掩体”这个逻辑子树同时挂给“狙击手”和“步兵”使用,而无需重写代码。

② 层次清晰,易于调试 (Readability)

相比于代码中密密麻麻的 if-else,行为树提供了直观的视觉层级。通过查看哪个节点亮起(Running),开发者可以一眼看出 AI 正在做什么以及为什么卡住。

③ 解决“状态爆炸”问题 (Scalability)

有限状态机 (FSM) 中,随着状态增加,状态间的连线会呈几何倍数增长(变成“面条代码”)。而行为树通过层级结构,让状态切换自然发生在父节点逻辑中,极大地降低了逻辑复杂度。

④ 反应式与预测性的平衡 (Reactive & Predictive)

行为树每帧(或高频)从根部重新扫描。这使得 AI 既能按计划行事(Sequence),又能随时对突发状况做出反应(Selector 的优先级抢占)。例如:正在巡逻时,一旦发现敌人,选择器会因为“发现敌人”的条件满足而立即中断巡逻,切换到攻击分支。

⑤ 状态存储与数据解耦 (Data Decoupling)

行为树通常配合 黑板 (Blackboard) 使用。黑板是一个共享内存,记录了 AI 关心的变量(如血量、目标位置)。逻辑(树)与数据(黑板)的分离,使得 AI 更加灵活。



评论(0)

查看评论列表

暂无评论


发表评论

表情 颜文字

插入代码