コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【C#】デリゲートを使用したステートパターン

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のようなインターフェースを用意して
それを継承したクラスを定義することでステートパターンを実装していたのですが

わざわざステートごとにクラスを定義するのが面倒なときもあるので
デリゲートを使用した関数単位でステートマシンを作ってみました
まだちゃんと使っていないので使い勝手が良いかどうかはわかっていないですが・・・