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 创建一个控制敌人的脚本
这样我们的敌人的建议的状态机就完成了。