美文网首页
005 Fsm状态机模块

005 Fsm状态机模块

作者: OnClick9927 | 来源:发表于2019-12-16 21:45 被阅读0次

讲在前面

该模块的灵感来自于Unity的Animator状态机,
所以用过的人,对该模块很容易理解

进入实例

第0步、实现状态机的节点类
第一步、实例化,状态机,和状态及节点
第二步、把节点注册到状态机中
第三步、设置状态机的起始段点
第四步、创建过渡条件数值
第五步 、过渡链接线创建
第六步、创建连接线条件
第七步、过渡连接线绑定过渡条件
第八步、启动状态机
第九步、让状态机转起来

public class State:IFsmState
{
   public void OnEnter()
   {
            Log.L(GetType() + "  Enter");
   }
   public void OnExit()
   {
            Log.L(GetType() + "  OnExit");
   }
    public void Update()
    {
        Log.L(GetType() + "  Update");
    }
}
public class State1 : State
{
}
public class State2 : State
{
}
    public class FsmExample : MonoBehaviour
    {
   //第一步实例化,状态机,和状态及节点
        FsmMoudle f = new FsmMoudle();
        State1 s1 = new State1();
        State2 s2 = new State2();

        private void Awake()
        {
            //第二步、把节点注册到状态机中
            f.SubscribeState(s1);
           f.SubscribeState(s2); 
          //第三步、设置状态机的起始段点
            f.EnterState = s1;
            //f.ExitState = s2;
         // 第四步、创建过渡条件数值
         var val=   f.CreateConditionValue<bool>("bool", true);
          //第五步 、过渡链接线创建
            var t1=  f.CreateTransition(s1, s2);
            var t2 = f.CreateTransition(s2, s1);
            //第六步、创建连接线条件
            //第七步、过渡连接线绑定过渡条件
            t1.BindCondition(f.CreateCondition<bool>("bool", false, ConditionCompareType.EqualsWithCompare));
            t2.BindCondition(f.CreateCondition<bool>(val, true, ConditionCompareType.EqualsWithCompare));
           //第八步、启动状态机
            f.Start();
        }
        private void Update()
        {
            //第九步、让状态机转起来
            f.Update();
            if (Input.GetKeyDown(KeyCode.Space))
            {
               f.SetBool("bool", false);
            }
            if (Input.GetKeyDown(KeyCode.Q))
            {
                f.SetBool("bool", true);
            }
        }
    }

结束

注意:如果一直卡在一个节点,会一直调用该节点的update
Exit节点只有OnEnter方法可能被调用
一旦运行到Exit节点,那么该状态机就彻底结束了

该状态机较为复杂,但是对于unity使用者理解起来不难
后续可能会配上 Unity插件扩展一起用

相关文章

  • 005 Fsm状态机模块

    讲在前面 该模块的灵感来自于Unity的Animator状态机,所以用过的人,对该模块很容易理解 进入实例 第0步...

  • FSM(有限状态机)模块

    IFramework所有模块总目录 简介 状态模式+有限状态机的思路,可以在各个状态之间来回切换。 FSM模块的使...

  • GDGeek使用总结

    FSM(有限状态机) GDGeek的FSM实现了分层状态机,并且整合了任务(Task)和插值动画(Tween),使...

  • Finite-state Machine 有限状态机

    FSM 有限状态机和Unity的Animator类似,不过FSM除了动画还可以应用在如AI状态等。 FSM框架 S...

  • FPGA Verilog HDL 设计-----有限状态机

    数字系统有两大类有限状态机(Finite State Machine,FSM):Moore状态机和Mealy状态机...

  • FPGA状态机

    其他参考:主要是区分moore状态机和mealy状态机的。[原创][FPGA]有限状态机FSM学习笔记(一)[转载...

  • 有限状态机抽取地址

    有限元状态机 什么是有限状态机 有限状态机(英语:finite-state machine,缩写:FSM)又称有限...

  • Android StateMachine

    状态机 状态机定义 状态机,Finite state machine,简称FSM。指一个对象在有限个状态内转移并处...

  • 在Unity中实现有限状态机

    简介 有限状态机,(英语:Finite-state machine, FSM),又称有限状态自动机,简称状态机,是...

  • 事件驱动型有限状态机EFSM的C语言实现

    一、什么是状态机? 有限状态机,(英语:Finite-state machine, FSM),又称有限状态自动机,...

网友评论

      本文标题:005 Fsm状态机模块

      本文链接:https://www.haomeiwen.com/subject/njhjnctx.html