有关于Unity3D中有限状态机简单的思路

来源:互联网 发布:ubuntu使用管理员账户 编辑:程序博客网 时间:2024/06/06 00:31

有限状态机的基本思路(个人理解)   

       有限状态机,(英语:Finite-state machine,FSM),又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。它反映从系统开始到现在时刻的输入变化,转移指示状态变更,并且用必须满足来确使转移发生的条件来描述它;动作是在给定时刻要进行的活动的描述。

      Unity 3D 中的有限状态机一般是来制作游戏中怪物或者人物的智能系统(AI),一般状态就是自动寻路,自动刷怪等状态,在一般的游戏中十分的常见,线面是本人对有限状态机自己的理解,希望对各位初学者有所帮助

       有限状态机实现思路

1.首先创建一个状态接口(所有的具体状态都实现这个接口)

  在接口类中创建枚举来存放状态类型

  在接口中创建所属的状态机对象,状态类型

  四个状态的方法: 1.进入状态 2.状态更新 3.切换状态的判断条件 4.退出状态。




2.创建有限状态机的管理类

  在管理类中创建字典来储存状态类型所对应的状态。

  创建当前状态所属对象,创建与状态机所关联的对象,创建状态机所属类型对象。

  创建状态机的有参构造,传入状态机所管理的对象。
  



  创建状态机的方法:1.注册状态方法 2.切换状态方法 3.移除状态方法。

  1.注册状态方法
     
    传入状态参数,通过状态类型在字典中查找是否存在,如果不存在,将当前状态赋值给状态机,将其添加到字典中。



  2.切换状态方法

    传入我们要进入的状态类型,在字典中通过状态类型来查找我们所需要的状态。

    判断获取的状态存在,存在的话判断当前是否存在状态,存在的话退出当前状态,然后进入我们所要进入的状态,使当前状态等于我们要紧如的状态。


   
  3.移除状态方法

    传入我们所要移除的状态类型。

    判断我们所要移除的状态是否为当前状态,不要移除当前状态。

    通过传入我们想要移除的状态,在字典中查找所要移除的状态,判断所要移除的状态是否存在,存在的话从字典中移除。


3.在UpDate函数中进行每帧的状态更新

  判断当前是否存在状态,存在的话,通过当前状态调用接口中的更新状态方法每帧进行更新

4.在UpDate还后执行LateUpDate进行每帧更新判断

  判断当前是否存在状态,存在的话,通过当前状态调用接口中的更新状态方法每帧进行更新


    以上是本人对有限状态机的理解,希望初学者能够学懂,希望各位大佬能够体谅,第一次编写博客,谢谢大家的支持!