Unity3D之FSM有限状态机

1状态基类FSMstate的创建

1.1我们首先创建出来俩个全局枚举,用来保存当前状态的ID和转换的条件transition。

 

1.2 我们所以的状态类给抽象出来一个基类出来,在创建一个字典来保存转换条件所对应的状态ID,定义一个字段来保存当前的状态的ID。这个ID是当前状态类的标识。

  

1.3 定义俩个方法,用来“添加转换条件”和“删除转换条件”。

 

 1.4 根据转换条件获得状态的ID

 

1.5 提供本状态的四个逻辑方法

 

2 状态管理类FSMSystem的创建。用来管理所有的状态。

2.1 定义字典来保存状态ID对应的状态和当前处于的状态和状态ID

 

2.2增加俩个“添加状态”和“删除状态”的功能。

 2.3 添加执行状态切换的方法,用来改变当前所处的状态。

 

 2.4 添加对当前状态调用的行为和切换到下个状态的方法。

 

   这样我们的FSM差不多就完成了,但是这样比如敌人有俩个状态,分别是“巡逻”状态和一个”追逐“主角的状态。假如敌人当前处于“巡逻”状态,当主角靠近敌人的时候,怎么去切换到“追逐”

主角的状态呢?通过前面我们知道,状态的切换是通过FSMSystem去管理的,所以我们在FSMState这个基类里面保有对FSMSystem的引用,这样每个状态的切换,就很容易去实现了。

 

3 下面我们以敌人巡逻,追逐主角的例子来应用我们的状态机。

3.1 增加一个PartalState类,用来敌人的巡逻。

3.2 在新建一个”追逐“主角的类

 3.3 创建一个控制敌人的脚本

这样我们的敌人的建议的状态机就完成了。

posted @ 2017-07-13 16:10  围墙外的世界  阅读(2493)  评论(0编辑  收藏  举报