コガネブログ

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

【C#】直列でタスクを管理する独自クラス

概要

var task = new SingleTask();

task.Add( onEnded =>
{
    Debug.Log( "1" );
    onEnded();
} );

task.Add( onEnded =>
{
    Debug.Log( "2" );
    onEnded();
} );

task.Add( onEnded =>
{
    Debug.Log( "3" );
    onEnded();
} );

task.Play( () =>
{
    Debug.Log( "completed" );
} );
1
2
3
completed

以前関わっていたUnityプロジェクトで
先輩が作成してくださったタスク管理クラスです
このクラスを使用するとコールバック地獄から解放されます

// アセットバンドル読み込み
AssetBundleManager.LoadAll( () =>
{
    // マスタ読み込み
    MasterManager.LoadAll( () =>
    {
        // セーブデータ読み込み
        SaveDataManager.LoadAll( () =>
        {
            // ログイン
            LoginManager.Login( () =>
            {
                // メインメニューに遷移
                SceneManager.LoadMainMenu( () =>
                {
                    Debug.Log( "完了" );
                } );
            } );
        } );
    } );
} );

例えばこのような処理を下記のように記述できるようになります

var task = new SingleTask();
task.Add( AssetBundleManager.LoadAll ); // アセットバンドル読み込み
task.Add( MasterManager.LoadAll      ); // マスタ読み込み
task.Add( SaveDataManager.LoadAll    ); // セーブデータ読み込み
task.Add( LoginManager.Login         ); // ログイン
task.Add( SceneManager.LoadMainMenu  ); // メインメニューに遷移
task.Play( () => Debug.Log( "完了" ) ); 

関連記事