转载:点击打开链接,http://blog.csdn.net/cloud_zero/article/details/38043127
简单介绍构建游戏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/