【ProgressBar】プログレスバーを表示する【UnityEditor】

エディッタで重い処理する場合に、進捗を把握するのに使います。
忘れるのでメモ。

キャンセルなし

リファレンス

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() を入れてます。