【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());

相关推荐
xian_wwq1 小时前
【学习笔记】解剖 Claude Code —— Anthropic 的 Harness 参考实现-09/15
人工智能·笔记·学习
其实防守也摸鱼1 小时前
Kimi K3深度测评:长文本之外的真实力
运维·开发语言·网络·人工智能·python·学习·安全
晓梦林1 小时前
Tools靶场学习笔记
笔记·学习
xian_wwq2 小时前
【学习笔记】什么是Harness Engineering- 01/15
人工智能·笔记·学习
xian_wwq2 小时前
【学习笔记】Agent 安全护栏 —— 当 Agent DROP TABLE 了你的生产数据库-07/15
笔记·学习·安全
刘步权2 小时前
KY-RTI分布仿真技术:第十三章 基于Unity的多语言三维态势仿真——以 Island Assault(夺岛突击)想定为例
unity·游戏引擎·仿真·态势·ky-rti·hla·rti
lichuangcsdn3 小时前
【Spring AI 学习(一)】spring ai是什么
人工智能·学习·spring·spring ai
SmalBox3 小时前
【节点】[Any节点]原理解析与实际应用
unity3d·游戏开发·图形学
MartinYeung53 小时前
[论文学习]AgentDojo:用于评估LLM智能体提示注入攻击与防御的动态环境
网络·学习
minglie14 小时前
蚂蚁S9矿板PS led驱动的三个实验-第1课 字符设备驱动
学习