状态机,层次状态机和行为树的区别以及联系

来源:互联网 发布:js给value赋值 编辑:程序博客网 时间:2024/06/07 21:15

简单介绍构建游戏AI所需要的一些工具:状态机,层次状态机,行为树的区别以及联系


Finite State Machines(有限状态机)

1. 基本节点是状态。他包含了一系列运行在该状态的行为以及离开这个状态的条件。
2. 这是图。状态可以任意跳转,实现简单,但是对于大的状态机很难维护.状态逻辑的重用性低.
3. 每一个状态的逻辑会随着一些新状态的增加而越来越复杂。维持状态的数量和状态逻辑复杂性是一个很大的难点。需要合理的分割以及重用状态。
4. 状态机状态的复用性很差,一旦一些因素变化导致这个环境发生变化。你只能新增一个状态,并且给这个新状态添加连接他以及其他状态的跳转逻辑
5. 状态机的跳转条件一旦不满足,就会一直卡在某一个状态(整个状态机就会卡住)

Hierarchical FSM(层次状态机)

1. 基本的概念和状态机一样。

2. 可以将一些状态节点的归结成一个超级状态(Super-States),共享一些状态跳转逻辑(Generalized Transitions)。相对于状态机,它主要提供了可重用得跳转条件。
3. 绝大多数层次状态机设计的时候,每一个子状态通常只包含在一个Super-States里面。(如果A,B两个Super-State都包含相同的子状态,则A,B分别添加两个不同的子状态实例)
4. 超级状态跳转依然需要考虑很多不同的子状态的情况。手动的修改这些状态跳转是非常恶心的一件事情。

5. 状态模块化很差,你很难在不修改代码的情况下完成新逻辑


Behaviour Tree(行为树)

一个流行的AI技术,涵盖了层次状态机,事件调度,事件计划,行为等一系列技术
1.高度模块化状态,去掉状态中的跳转逻辑,使得状态变成一个“行为”。

2."行为"和"行为"之间的跳转是通过父节点(Composite)的类型来决定的(例如sequence或者selector) 。比如并行处理两个行为,在状态机里面无法同时处理两个状态。

3.通过增加控制节点的类型,可以达到复用行为的目的。

4. 可视化编辑

参考资料:

http://aigamedev.com/open/article/fsm-reusable/

http://aigamedev.com/open/article/hfsm-gist/

http://aigamedev.com/open/article/bt-overview/

0 0