在做一些游戏AI时,比如游戏里面的角色、npc、怪物等一些预设的AI逻辑,最简单的时候用if...else...,但是当游戏逻辑有点复杂时就显得有点力不从心,单单看这一大堆的if...else都恶心到吐。目前比较流行的ai模型有状态机和行为树(Behavior tree).
状态机的实现我这里就不多加讨论了
当游戏中的角色,npc,怪物等的决策不太复杂时状态机很有效,然而随着决策的复杂,状态机的缺点也慢慢的体现出来了
罗列状态机比较突出的几个缺点:
1、每一个状态的逻辑会随着新的状态的增加而越来越复杂。
2、状态机状态的复用性很差,一旦一些因素变化导致环境发生变化,你只能新增一个状态,并给这个新状态添加连接及其跳转逻辑。
3、没办法并行处理多个状态。
行为树
1、高度模块化状态,去掉状态中的逻辑跳转,使得状态编程一个"行为"。
2、行为和行为之间的跳转是通过父节点的类型来决定的。并且可以通过并行节点来并行处理多个状态。
3、通过增加控制节点的类型,可以达到复用行为的目的。