【ProgressBar】プログレスバーを表示する【UnityEditor】
2023年5月10日
エディッタで重い処理する場合に、進捗を把握するのに使います。
忘れるのでメモ。
キャンセルなし

public static void DisplayProgressBar (string title, string info, float progress);
例
// キャンセルなし
EditorUtility.DisplayProgressBar(
"処理中",
"Doing some work...",
progress
);
キャンセルあり

public static bool DisplayCancelableProgressBar (string title, string info, float progress);
例
// キャンセルあり
bool isCanced = EditorUtility.DisplayCancelableProgressBar(
"処理中",
$"Doing some work...",
progress
);
// キャンセルされました
if( isCanced) break;
非表示
public static void ClearProgressBar ();
これを呼ばないとプログレスバーは消えてくれません。
サンプルコード
using System;
using System.Threading.Tasks;
using UnityEngine;
using UnityEditor;
public class DisplayProgressBarSample
{
//----------------------------------------------------------------------------
[MenuItem("TEST/DisplayProgressBarSample")]
static async public void Test()
{
int quantity = 100;
// キャンセルなし版
for( int i = 0; i < quantity; ++i)
{
float progress = i / (float)quantity;
EditorUtility.DisplayProgressBar(
"処理中",
$"{i}/{quantity} ({(int)(progress*100)}%)",
progress
);
// なにか重い処理
await Task.Delay( 1);
}
// キャンセルあり版
for( int i = 0; i < quantity; ++i)
{
float progress = i / (float)quantity;
bool isCanced = EditorUtility.DisplayCancelableProgressBar(
"処理中",
$"{i}/{quantity} ({(int)(progress*100)}%)",
progress
);
// キャンセルされました
if( isCanced) break;
// なにか重い処理
await Task.Delay( 1);
}
EditorUtility.ClearProgressBar();
}
} // DisplayProgressBarSample
メニューから Test > DisplayProgressBarSample で確認できます。

注意:重い処理の代わりに Task.Delay() を入れてます。