前言

**有限状态机(Finite State Mechine,FSM)行为树(Behaviour Trees)**是常见的两种控制游戏角色行为逻辑的方式。

FSM将走、跑、跳、攻击、受击等状态不假区分的放到一起并进行逻辑连接,实践中需要我们维护一个当前状态,并时刻更新该状态的逻辑。对于简单的少数的状态,FSM是适用的。但如果状态间的切换逻辑复杂,FSM就会变为“蜘蛛网”,难以维护。

下面是我实现的FSM(“没写博客呢,正在施工中。。。”);

对于复杂的行为,最好使用行为树。行为树正如其名,它会向层次遍历树一样从根节点开始依次判断每个节点是否符合要求,对于符合要求的节点,我们会执行这一节点下的行动节点。

下面参考文章:“游戏AI行为决策方法——行为树”,实现自己的行为树组件(没有全抄)。

行为树(Behaviour Trees)

行为树 BehaviourTrees
如上图所示,一棵行为树包含根节点、动作选择节点(组合节点)、动作节点、修饰节点这几部分。

理解行为树

动作节点

动作节点记录简单的基础行为,支持自定义。

修饰节点

特殊的节点,只包含一个子节点。
有两种修饰节点:

取反节点 Inverter

重复执行节点 Repeat

组合节点

常见的组合节点有选择节点顺序节点。其余还有并行节点过滤节点主动选择节点监视节点等。

选择节点 Selector

按照从左至右的顺序,当一个动作执行完成时就会返回。

顺序节点 Sequence

按照从左至右的顺序,依次执行每个动作,直到全部执行完成或某个动作执行中被打断。

实现

基类

所有节点的基类

所有节点均具有一个运行状态;需要进行逻辑更新;需要实现添加节点的功能。

组合节点基类

派生类