コガネブログ

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

【Unity】EditorUtility.ClearProgressBar の呼び出し漏れを防ぐためのクラス

ソースコード

使用例

using System.Collections;
using Unity.EditorCoroutines.Editor;
using UnityEditor;
using UnityEngine;

public static class Example
{
    [MenuItem( "Tools/Hoge" )]
    private static void Hoge()
    {
        EditorCoroutineUtility.StartCoroutineOwnerless( Test() );
    }

    private static IEnumerator Test()
    {
        var count = 100;

        using ( var bar = new DisplayProgressBarScope( "Title", "Progress: {0}" ) )
        {
            for ( var i = 0; i < count; i++ )
            {
                bar.Progress = ( float ) i / count;

                yield return new WaitForSeconds( 0.1f );
            }
        }
    }
}

IDisposable を実装しているため、
プログレスバー表示中に例外が発生しても
ちゃんと EditorUtility.ClearProgressBar が呼び出されます
そのため、プログレスバーが表示されたままになる状況を防ぐことができます