【Unity】入门学习笔记180715——人工智能(11)——有限状态机/行为树

本文探讨了AI角色通过决策系统来确定下一步行为的方式,详细介绍了有限状态机和行为树等构建决策系统的策略,并深入分析了行为树在AI编辑器中的优势及其实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、AI角色通过决策系统来确定下一步行为,相对于运动系统感知系统来说,利用有限状态机行为树就可以简单的构造出不错的决策系统。


2、有限状态机的FSM图

①有限状态机是AI系统中最简单的,同时也是作为有效和常用的方法

②当某些条件发生时,状态机当前状态转换为其他状态

③用户编写的每个程序都是状态机

④认真考虑每个状态和转换部分


3、

方法一:用Switch语句实现

方法二:用FSM框架实现通用的有限状态机

https://wiki.unity3d.com/index.php?title=Finite_State_Machine


4、行为树

行为树很适合做AI编辑器,为设计者提供了丰富的流程控制方法

行为树中的叶节点:

    ①条件节点:if条件测试,向父节点返回T/F

    ②行为节点:完成实际的工作,绝大部分动作会返回succes

行为树中的组合节点:

    ①选择节点:?,从左到右依次执行所有子节点,只要返回F,继续执行后续节点直到一个节点返回success或running

    ②顺序节点:→,从左到右依次执行所有子节点,只要返回success,继续执行直至一个子节点返回F或running

    ③随机选择节点:E,随机访问子节点而不是从左到右

    ④修饰节点:只包含一个子节点,用于以某种方式改变这个子节点的行为

    ⑤并行节点:同时执行,直到其中一个返回failure


5、React插件快速创建行为树

https://www.assetstore.unity3d.com/#/content/516

免费插件选择——Rain Indie

<think>好的,我现在需要比较行为树(Behavior Trees)和有限状态机(Finite State Machines, FSM)在游戏AI或机器人控制中的应用与区别。首先,我应该回顾一下这两种技术的基本概念和各自的特点。 根据引用[1]和[4],有限状态机(FSM)主要用于通用的可视化编程,而行为树则更多用于人工智能。FSM通过状态和转移来管理逻辑,当状态较多时,可能会变得复杂,因此分层有限状态机(HFSM)被用来分层次管理状态,比如将相关状态归类成子状态机,再通过上层状态机协调。这在游戏AI中很常见,比如角色的不同行为状态(行走、攻击、躲避)可以通过子状态机管理,而主状态机处理更高层次的逻辑。 行为树则采用树状结构,节点包括控制节点(如选择、序列)和执行节点。这样的结构使得行为树更具模块化和可复用性,适合处理复杂的决策逻辑。引用[2]和[3]提到,在机器人控制中,状态空间的设计需要考虑多维向量,包括位置、传感器数据等,行为树可能更适合处理这种需要动态调整的多条件决策。 接下来需要比较两者的区别。首先是结构差异:FSM是状态和转移的图结构,而行为树是树状结构。这影响了它们的扩展性和复杂度管理。当需求变化时,行为树可能更容易通过添加或调整节点来适应,而FSM可能需要修改多个状态和转移条件,尤其是在分层情况下,虽然HFSM可以缓解这个问题,但可能还是不如行为树灵活。 其次是执行逻辑。FSM依赖于当前状态和触发事件,状态转换是显式的;而行为树通过自顶向下的遍历,根据节点条件动态决定执行路径。这使得行为树的反应更动态,能够根据环境变化实时调整,适合需要频繁条件检查的场景,比如游戏中的NPC决策或机器人应对突发环境变化。 应用场景方面,FSM适合状态明确且转换简单的场景,比如角色的基础行为管理;行为树则适合需要复杂决策和条件判断的任务,如高级AI策略或机器人自主导航。引用[4]提到FSM在状态多时维护困难,而行为树的模块化设计更易于扩展和维护。 此外,在机器人控制中,引用[2]和[3]指出状态空间设计复杂,涉及多维度数据,行为树的结构可能更易于整合传感器数据并做出综合决策。例如,机器人需要根据当前位置、传感器输入和历史动作来调整行为,行为树可以通过组合不同的条件节点灵活处理这些信息。 最后,关于性能,FSM由于状态转换直接,可能在简单场景下更高效;而行为树由于需要遍历节点,可能在复杂逻辑中引入一定开销,但结构清晰带来的维护优势可能抵消这点。 总结下来,两者的选择取决于具体需求:状态明确且转换简单用FSM,复杂决策和动态调整用行为树。在游戏AI中,FSM用于基础行为,行为树用于复杂NPC;在机器人控制中,FSM处理底层状态,行为树管理高层决策。</think>### 行为树 vs 有限状态机:特点与应用场景分析 #### **1. 核心概念对比** - **有限状态机(FSM)** 基于**状态**和**状态转移**的图结构模型。每个状态定义了一组行为,通过**事件或条件触发**切换到其他状态。例如,游戏角色的“待机→攻击→逃跑”状态链[^4]。 - **优点**:逻辑直观,适合状态明确且转换简单的场景。 - **缺点**:状态爆炸问题(状态多时难以维护),扩展性较差。 - **行为树(Behavior Tree)** 采用**树状分层结构**,由控制节点(如选择、序列、并行)和执行节点(如条件、动作)组成。例如,机器人决策树中“是否检测到障碍→避开→继续巡逻”的分支逻辑[^2]。 - **优点**:模块化设计,支持动态优先级调整,适合复杂条件判断。 - **缺点**:实现复杂度较高,需合理设计节点逻辑。 #### **2. 关键区别** | 维度 | 有限状态机 (FSM) | 行为树 (BT) | |-------------------|------------------------------------------|------------------------------------------| | **结构** | 图结构(状态与转移) | 树结构(节点与层级) | | **扩展性** | 需手动管理状态转移,扩展困难 | 通过添加/调整节点扩展,灵活性高 | | **复杂度管理** | 状态多时需分层处理(HFSM) | 天然支持模块化,逻辑更清晰 | | **执行逻辑** | 基于当前状态触发转移 | 自顶向下遍历,动态选择路径 | | **适用场景** | 状态明确、转换规则固定的场景(如角色动画) | 多条件、动态决策场景(如NPC AI、机器人控制) | #### **3. 应用场景示例** - **游戏AI** - **FSM**:管理角色基础行为(如“移动→攻击→死亡”),适合动作类游戏的连招系统。 - **行为树**:实现NPC智能决策(如“检测玩家→评估威胁→选择反击或逃跑”),常见于开放世界游戏的动态交互[^1]。 - **机器人控制** - **FSM**:控制底层硬件状态(如“启动→校准→执行任务→休眠”)[^3]。 - **行为树**:处理高层任务规划(如“导航→避障→抓取物体”),结合传感器数据动态调整策略[^2]。 #### **4. 典型代码结构对比** - **FSM示例(游戏角色状态切换)** ```python class State: def enter(self): pass def exit(self): pass class AttackState(State): def enter(self): print("进入攻击状态") def exit(self): print("退出攻击状态") # 状态管理器 class StateMachine: def __init__(self): self.current_state = None def change_state(self, new_state): if self.current_state: self.current_state.exit() self.current_state = new_state self.current_state.enter() ``` - **行为树示例(机器人避障决策)** ```python class ConditionNode: def check(self): # 检测障碍物条件 return True # 假设检测到障碍 class ActionNode: def execute(self): print("执行避障动作") # 行为树定义 root = SelectorNode([ SequenceNode([ConditionNode(), ActionNode()]), # 条件满足时执行动作 DefaultActionNode() # 默认行为 ]) root.execute() ``` #### **5. 如何选择?** - **选择FSM的场景**: - 状态数量有限且转换逻辑简单。 - 需要快速实现原型(如UI流程控制)。 - 引用[1]提到:FSM更适合通用可视化编程而非复杂AI。 - **选择行为树的场景**: - 需要动态优先级调整(如实时策略游戏)。 - 系统需频繁扩展或复用逻辑模块(如机器人多任务协作)。 - 引用[2]指出:行为树能更好地整合多维状态空间(如传感器数据)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值