using System.Collections; using System.Collections.Generic; using UnityEngine; namespace MuHua { /// /// 有限状态机 /// public abstract class IMachine : MonoBehaviour { protected IMachineState currentState; protected Dictionary states = new Dictionary(); protected virtual void Start() => InitializeStates(); protected virtual void Update() => currentState?.Update(); #region 状态机功能 protected abstract void InitializeStates(); protected virtual void RegisterState(string stateType, IMachineState state) { if (!states.ContainsKey(stateType)) { states.Add(stateType, state); } } public virtual void ChangeState(string stateType) { if (states.ContainsKey(stateType)) { currentState?.Exit(); currentState = states[stateType]; currentState.Enter(); } else { Debug.LogWarning($"State {stateType} is not registered."); } } #endregion } }