状态机和行为树

对游戏NPC的行为控制一般有2种,一种是状态机,一种是行为树。

状态机:

Unity对人物动画的控制是基于状态机的,如下图:

可以看到,每个状态除了包含自身的状态行为外,还需要和其他的状态打交道,需要输入状态机之间切换的条件。因为这一点,导致增加状态会使得状态机越来越复杂。

状态机是一种网状结构,耦合性很大。

行为树:

1、行为树是将游戏NPC的行为(走动,攻击,跳跃)搭建为一颗树,父节点是行为分支,叶节点是行为的具体表现。

2、行为树将NPC的行为包装为一个对象,符合面向对象的设计理念。

3、行为树的好处是将行为逻辑和状态数据剥离,降低耦合,方便策划配置,而无需对每个人物的行为进行代码控制,提高了可视性,简化问题排查,提高效率。

4、行为树把行为和状态数据剥离,可以这么理解,比如NPC要跳跃,那么前提条件可以是:已完成上一个动作,HP大于0,下一个行为状态设置为跳跃。把这些条件看作状态数据,把跳跃的Animation看做行为,那么当要切换行为的时候,就不用去管上一个状态是什么行为、和上一个状态是什么关系。构建出来的行为树,只需要判断当前的状态数据是否满足跳跃的条件,满足就执行行为,不满足就返回false。

5、行为树是树状结构,相对于状态机的网状结构来说耦合性更低。

6、行为树的子节点执行时需要返回,返回类型有:False,True,Running。

7、行为树的父节点存在多个情况,1个节点和多个节点,当父节点有多个字节点时,有几种组合顺序:

并行执行:并行执行多个子节点的行为。

随机执行:从多个字节点中随机选择一个执行。

选择执行:从多个字节点中按照顺序选择一个能执行的行为。

顺序执行:按照顺序依次执行多个子节点。

发布了53 篇原创文章 · 获赞 12 · 访问量 1万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章