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


using UnityEngine;
using QFramework;

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

        // 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();
        }
    }
}

你可能感兴趣的:(unity,游戏引擎,状态机)