【GameFramework框架】FSM使用

一、使用流程图

二、使用方法

1、创建状态

csharp 复制代码
//状态一
public class IdleState : FsmState<StateMgr>
{
    protected override void OnInit(IFsm<StateMgr> fsm)
    {
        Debug.Log("IdleState初始化");
    }

    protected override void OnEnter(IFsm<StateMgr> fsm)
    {
        Debug.Log("进入Idle状态");
    }

    protected override void OnUpdate(IFsm<StateMgr> fsm, float elapseSeconds, float realElapseSeconds)
    {
        if (fsm.Owner.move)
        {
            ChangeState<MoveState>(fsm);
        }
    }

    protected override void OnLeave(IFsm<StateMgr> fsm, bool isShutdown)
    {
        Debug.Log("离开Idle状态");
    }

    protected override void OnDestroy(IFsm<StateMgr> fsm)
    {
        Debug.Log("销毁Idle状态");
    }
}
csharp 复制代码
//状态二
public class MoveState : FsmState<StateMgr>
{
	protected override void OnInit(IFsm<StateMgr> fsm)
	{
		Debug.Log("MoveState初始化");
	}
	protected override void OnEnter(IFsm<StateMgr> fsm)
	{
		Debug.Log("进入Move状态");
	}
	protected override void OnUpdate(IFsm<StateMgr> fsm, float elapseSeconds, float realElapseSeconds)
	{
		if (!fsm.Owner.move)
		{
			ChangeState<IdleState>(fsm);
		}
	}

	protected override void OnLeave(IFsm<StateMgr> fsm, bool isShutdown)
	{
		Debug.Log("离开Move状态");
	}
}

2、创建状态管理器,创建fsm,并根据条件进行状态切换

csharp 复制代码
public class StateMgr : MonoBehaviour
{
    public bool move=false;
    private IFsm<StateMgr> m_fsm;
    // Start is called before the first frame update
    void Start()
    {
        m_fsm = GF.Fsm.CreateFsm("PlayerFSM", this, new CheckState(),new IdleState(), new MoveState());
        m_fsm.Start<IdleState>();
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
           move=!move;
        }
    }
}

三、注意点

1、创建状态机时,不能加入多个相同的状态,否则会报错

例如下面这个情况,加入了两个相同的new CheckState(),就会报错

m_fsm = GF.Fsm.CreateFsm("PlayerFSM", this, new CheckState(),new IdleState(), new CheckState());

相关推荐
lilihuigz8 小时前
Tutor LMS 4.0 Beta版全新上线:以学习者为中心的移动优先学习体验
学习·在线教育·lms
kuinnebula12 小时前
RTSP学习
学习
北顾笙98013 小时前
LLM学习-day04
学习
郝学胜-神的一滴13 小时前
罗德里格斯旋转公式(Rodrigues‘ Rotation Formula)完整推导
c++·unity·godot·图形渲染·three.js·unreal
lzj_pxxw14 小时前
W25Q64存储芯片 软件设计刚需常识
stm32·单片机·嵌入式硬件·mcu·学习
Slow菜鸟15 小时前
AI学习篇(四) | AI设计类Skills推荐清单(2026年)
人工智能·学习
念恒1230615 小时前
Python(列表进阶)
python·学习
QYQ_112716 小时前
嵌入式学习——杂项设备、Platform总线和设备树源文件
学习
wuxinyan12317 小时前
大模型学习之路03:提示工程从入门到精通(第三篇)
人工智能·python·学习
十安_数学好题速析18 小时前
【多选】曲线方程:四步避坑判断曲线类型
笔记·学习·高考