using System; using Cysharp.Threading.Tasks; using UnityEngine; namespace Stary.Evo { public interface FSMIState { IFsmSystem FsmSystem { get; } string Name { get; } //进入该状态时调用 void OnEnter(); UniTask OnEnterAsync(T param); UniTask OnEnterAsync(T1 param1, T2 param2); //每帧调用 void OnUpdate(); //退出该状态时调用 void OnExit(); UniTask OnExitAsync(); } public abstract class AbstractFSMIState : FSMIState { public IFsmSystem FsmSystem { get; } public string Name { get; } public AbstractFSMIState(IFsmSystem system) { FsmSystem = system; Name = GetType().Name; } public abstract UniTask OnEnterAsync(T param); public abstract UniTask OnEnterAsync(T1 param1, T2 param2); public abstract void OnEnter(); public virtual void OnUpdate() { // Timer += Time.deltaTime; } public abstract void OnExit(); public abstract UniTask OnExitAsync(); } }