美文网首页
FSM(有限状态机)模块

FSM(有限状态机)模块

作者: Qkuang | 来源:发表于2020-01-14 16:42 被阅读0次

IFramework所有模块总目录

简介

状态模式+有限状态机的思路,可以在各个状态之间来回切换。

FSM模块的使用

代码如下:

using System.Collections;
using System.Collections.Generic;
using IFramework;
using IFramework.FSM;           // 引入FSM命名空间
using UnityEngine;

//实现 IFsmState接口。
public class JumpState : IFsmState
{
    public void OnEnter()
    {
        Debug.Log("跳跃状态进入……");
    }
    public void OnExit()
    {
        Debug .Log("跳跃状态退出……");

    }
    public void Update()
    {
        Log.L("跳跃!");
    }
}

public class RunState : IFsmState
{
    public void OnEnter()
    {
         Debug.Log("奔跑状态进入……");
    }

    public void OnExit()
    {
        Debug .Log("奔跑状态退出……");

    }

    public void Update()
    {
        Log.L("奔跑!");

    }
}
public class IdleState : IFsmState
{
    public void OnEnter()
    {
        Debug.Log("待机状态进入……");
    }

    public void OnExit()
    {
        Debug .Log("待机状态退出……");
    }

    public void Update()
    {
        Log.L("待机!");
    }
}
public class TestFSM : MonoBehaviour
{
    // Start is called before the first frame update
    FsmMoudle fsmMoudle ;
    JumpState jumpState;
    RunState runState ;
    IdleState idleState ;
    void Start()
    {
        // 初始化 状态机、跑状态、
        fsmMoudle = new FsmMoudle();
        jumpState = new JumpState();
        runState = new RunState();
        idleState = new IdleState ();
        
        //将状态 都加入 状态机中
        fsmMoudle.SubscribeState(jumpState);
        fsmMoudle.SubscribeState(runState);
        fsmMoudle.SubscribeState(idleState);
        // 设置初始 状态
        fsmMoudle.EnterState = idleState;
        // 创建过渡条件数值
         var val=fsmMoudle.CreateConditionValue<bool>("bool", true);
         //过渡链接线创建
            var t1=  fsmMoudle.CreateTransition(idleState, jumpState);
            var t2 = fsmMoudle.CreateTransition(jumpState, runState);
        //过渡连接线绑定过渡条件
            t1.BindCondition(fsmMoudle.CreateCondition<bool>("bool", false, ConditionCompareType.EqualsWithCompare));
            t2.BindCondition(fsmMoudle.CreateCondition<bool>(val, true, ConditionCompareType.EqualsWithCompare));
           //第八步、启动状态机
            fsmMoudle.Start();

    }

    // Update is called once per frame
    void Update()
    {
        fsmMoudle.Update();
        if (Input.GetKeyDown(KeyCode.Space))
            {
               fsmMoudle.SetBool("bool", false);
            }
            if (Input.GetKeyDown(KeyCode.D))
            {
                fsmMoudle.SetBool("bool", true);
            }
 
    }
}

输出结果:

注意: 先点击的“空格”,再点击的“D键”,途中多次点击,并不会出现状态胡乱切换的情况。

image.png

代码解析

  • 自定义状态类 ,实现IFsmState接口
  • 接口需要实现:进入、执行、退出三个状态
  • 创建状态机FsmMoudle 对象,并将 需要纳入的状态纳入状态机中。
  • 设置连线,以及连线的切换条件
  • 在交互代码中触发条件,即可切换状态机中的各个状态

结尾

以上内容是 作者个人的理解,如有错误,欢迎指出。
顺便给出OnClick大佬自己 写的文档地址:005 FSM 模块
如果对 IF框架有其他看法,也欢迎大家 进群交流。

相关文章

  • FSM(有限状态机)模块

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

  • Finite-state Machine 有限状态机

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

  • GDGeek使用总结

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

  • 有限状态机FSM的几种简单实现

    『代码github地址』 标签: 有限状态机,Akka fsm,squirrel-foundation,java状...

  • 有限状态机抽取地址

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

  • 状态机

    有限状态机 finite-state machine FSM 有限状态机在设计交易订单系统时,会存在正向状态(待...

  • 运维基础知识-tcp/ip

    有限状态机FSM:Finite State Machine 1、CLOSED 没有任何连接状态 2、LISTEN ...

  • 如何使用有限状态机

    1.背景介绍 有限状态机,(英语:Finite-state machine, FSM),又称为有限状态自动机...

  • 什么是有限状态机

    1.背景介绍 有限状态机,(英语:Finite-state machine, FSM),又称为有限状态自动机,简称...

  • 在Unity中实现有限状态机

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

网友评论

      本文标题:FSM(有限状态机)模块

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