游戏AI:行为树与状态机设计

在游戏AI开发中,行为树(Behavior Tree)和状态机(Finite State Machine, FSM)是两种核心架构。它们分别适用于不同复杂度的行为逻辑,下面从设计原理、优缺点和实现示例展开分析。


1. 行为树(Behavior Tree)

设计原理

  • 采用树形分层结构,节点分为控制节点(顺序、选择、并行)和执行节点(动作、条件)。
  • 通过递归遍历实现动态决策,例如:
    根节点 → 选择节点 → [条件节点: 玩家可见?] → [动作节点: 攻击]  
                  ↘ [动作节点: 巡逻]  
    

  • 支持优先级中断(如高优先级行为打断低优先级行为)。

优点
✅ 模块化强,节点可复用
✅ 易于扩展和调试(可视化编辑器友好)
✅ 天然支持并行行为(如"移动"和"射击"同时执行)

缺点
❌ 实现复杂度较高
❌ 过度分层可能导致性能损耗

伪代码示例(NPC敌人逻辑):

class BehaviorTree:  
    def run(self):  
        if self.check("玩家在视野内"):  # 条件节点  
            self.execute("攻击")       # 动作节点  
        else:  
            self.execute("巡逻")  


2. 状态机(Finite State Machine)

设计原理

  • 实体在有限状态集合中切换(如$S = \{\text{空闲},\text{追击},\text{撤退}\}$)。
  • 状态转移由事件触发(如$E_{\text{受伤}} \rightarrow S_{\text{撤退}}$)。
  • 数学描述:状态转移函数 $\delta: S \times E \rightarrow S$。

优点
✅ 逻辑直观,适合线性流程(如剧情动画)
✅ 执行效率高(无递归开销)

缺点
❌ "状态爆炸"问题($n$种事件可能导致$O(n^2)$转移路径)
❌ 难以维护并行行为

伪代码示例(BOSS战阶段切换):

class BossFSM:  
    states = {"PHASE1", "PHASE2", "DEATH"}  
    def handle_event(self, event):  
        if self.state == "PHASE1" and event == "HP<50%":  
            self.state = "PHASE2"  # 状态转移  


3. 对比与选型建议
维度行为树状态机
复杂度高(分层决策)低(显式状态)
扩展性⭐⭐⭐⭐⭐⭐
适用场景开放世界NPC、RTS单位过场动画、简单机关

设计准则

  • 选择行为树当需求包含:
    • 行为优先级动态调整
    • 大量条件分支(如"感知系统→决策→动作"链)
  • 选择状态机当需求满足:
    • 状态数量有限($ |S| \leq 10 $)
    • 确定性流程(如回合制游戏)

💡 混合方案:现代游戏常组合使用——状态机管理宏观阶段(如BOSS战阶段),行为树控制阶段内微观行为(如攻击模式选择)。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐