private enum State { FADE_IN, IDLE, FADE_OUT, } private readonly StateMachine<State> stateMachine = new StateMachine<State>(); private void Start() { stateMachine.Add(State.FADE_IN, () => {}, () => {}, () => {}); stateMachine.Add(State.IDLE, () => {}, () => {}, () => {}); stateMachine.Add(State.FADE_OUT, () => {}, () => {}, () => {}); stateMachine.SetState(State.FADE_IN); } private void Update() { stateMachine.Update(); }
C#でステートパターンを実装する時、IStateのようなインターフェースを用意して
それを継承したクラスを定義することでステートパターンを実装していたのですが
わざわざステートごとにクラスを定義するのが面倒なときもあるので
デリゲートを使用した関数単位でステートマシンを作ってみました
まだちゃんと使っていないので使い勝手が良いかどうかはわかっていないですが・・・