unity-AI设计理念和编程思想(二)

    AI角色通过感知系统获取信息之后要进行处理,并决定下一步将要执行的行为,这就是决策层需要做的工作。现在比较流行的自主决策系统主要有两种:有限状态机和行为树

    有限状态机(FSM)

    由一组状态(包括一个初始状态)、输入和状态转换函数组成。什么是状态呢?简单来说,就是不同状态对应不同行为。它是由游戏设计者事先设定的,比如一个具有情绪的AI,高兴时会哈哈大笑,伤心时会哭。需要注意的是:有限状态机是AI系统里最简单的,也是最有效的,最常用的;当某些条件发生时,状态机会从当前状态转换为其他状态;表示有限状态机最直接的方法是FSM图。

    不太清楚unity从那个版本开始使用类似虚幻4蓝图的动画状态机来定义玩家的行为。这与有限状态机的做法类似,实现有限状态机的方法有两种:Switch语句,FSM框架 

    Switch语句: 利用switch...case...语句可以实现,这个很简单也很好理解。

    FSM框架,在这种框架中,每种状态都有自己的字典,比如说发现玩家是输入,输出状态就是追逐,再比如生命值为0,输出状态就是死亡。每一个状态都是一个状态类,而FSM还有一个重要的类就是AdvancedFSM类,它负责来管理这些状态类。还有一个重要的类就是FSMState类,它是所有AI状态的基类。

    行为树:

    前面说到有限状态机是用来处理简单行为逻辑的,一旦复杂起来,你看到代码全是很多的Switch和if语句,这样很难复用、维护以及模块化。行为树和数据结构中的树一样,主要采用4种节点(也称任务)来描述行为逻辑,分别是顺序节点,选择节点,条件节点和行为节点。每一颗树都表示一个AI逻辑,要执行这个AI逻辑,需要从根节点开始遍历执行整棵树,遍历执行的过程中,父节点会根据自身的类别,确定需要如何执行、执行那些子节点并继而执行,子节点执行完毕之后,会将执行结果返回给父节点。  

    条件节点,使用if条件测试,比如是否看到玩家,结果为真,向父节点返回success,否则返回failure。

    行为节点:用来完成实际的工作,例如移动角色,播放声音,绝大多数返回success。

    上面两种节点也称叶节点,主要就包括条件和行为节点。

    还有一种叫做组合节点,包括选择节点,顺序节点、并行节点、修饰节点等。主要说一下修饰节点,它只包含一个节点,用于以某种方式改变这个子节点的行为。

    这两种AI决策的权衡:

    状态机,它是等待某个事件发生,然后转换状态。而行为树是以轮询的方式实现的,各自有优缺点,也是要具体问题具体分析。

    

猜你喜欢

转载自blog.csdn.net/scopperil/article/details/80406992
今日推荐