Qframework中超级方便的FSM状态机 unity

文章介绍了如何在Unity项目中使用QFramework的FiniteStateMachine(FSM)实现游戏状态管理,包括初始状态GameStart、世界状态World和战斗状态Battle的切换逻辑以及GUI控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


using UnityEngine;
using QFramework;

namespace Neo
{
    public class GameStateManager : MonoBehaviour
    {
        public enum GameStates
        {
            GameStart,
            World,
            Battle,
        }
        public FSM<GameStates> FSM = new FSM<GameStates>();

        // Start is called before the first frame update
        void Start()
        {


            FSM.State(GameStates.GameStart)
              .OnCondition(

                () => true   //FSM.CurrentStateId == GameStates.GameStart

                )
              .OnEnter(() =>
              {
                  Debug.Log("Enter A");
              })
              .OnUpdate(() =>
              {

              })
              .OnFixedUpdate(() =>
              {

              })
              .OnGUI(() =>
              {
                  GUILayout.Label("State Start");
                  if (GUILayout.Button("To State World"))
                  {
                      FSM.ChangeState(GameStates.World);
                  }
              })
              .OnExit(() =>
              {
                  Debug.Log("Enter B");

              });


            FSM.State(GameStates.World)
                .OnCondition(() => true)
                .OnGUI(() =>
                {
                    GUILayout.Label("State World");
                    if (GUILayout.Button("To State Start"))
                    {
                        FSM.ChangeState(GameStates.GameStart);
                    }
                    if (GUILayout.Button("To State Battle"))
                    {
                        FSM.ChangeState(GameStates.Battle);
                    }

                });

            FSM.State(GameStates.Battle)
                .OnCondition(() => true)
                .OnGUI(() =>
                {
                    GUILayout.Label("State Battle");
                    if (GUILayout.Button("To State Start"))
                    {
                        FSM.ChangeState(GameStates.GameStart);
                    }
                    if (GUILayout.Button("To State World"))
                    {
                        FSM.ChangeState(GameStates.World);
                    }

                });


            FSM.StartState(GameStates.GameStart);
        }

        // Update is called once per frame
        void Update()
        {
            FSM.Update();
        }
        void FixUpdate()
        {
            FSM.FixedUpdate();
        }
        private void OnGUI()
        {
            IMGUIHelper.SetDesignResolution(256, 192);
            FSM.OnGUI();
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值