この記事でのバージョン
Unity 2018.4.6f1
はじめに
Unityにはエディタ拡張時に進捗を表示するための
EditorUtility.Display(Cancelable)ProgressBarという物が用意されています。
そしてUnity 2020.1から、これに似た機能である
エディタ拡張時に非同期処理の進捗を表示するためのProgressが追加されました。
今回はこれを試してみようという感じの記事です。
なお、イメージとしては以下のような感じ。
Progress
さっそくProgressの使い方ですが、Startで開始し、Reportで更新、Finishで終了する感じです。
//タスク開始、返り値でタスクIDの取得 int id = Progress.Start("タスク名", "タスクの説明");
//Startで受け取ったIDを使ってタスクの進捗状況を更新 Progress.Report(id, progress, "タスクの説明");
//タスクの終了(Progress.StatusにはCanceledやFailedもある)
Progress.Finish(id, Progress.Status.Succeeded);
他にもタスクの状況を取得したり、タスクをキャンセルしたりなんて事も出来ます。
//タスクの状況を取得(Running, Succeeded, Failed, Canceledがある)
Progress.Status taskStatus = Progress.GetStatus(id);
//タスクキャンセル
Progress.Cancel(id);
なお、エディタの右下で現在進行中のタスクが表示されます。
また、クリックする事で詳細を確認する事も可能です。
ちなみにEditorCoroutineUtilityを使うと、
エディタ拡張時でも非同期処理(コルーチン)を簡単に実装出来ます。
(※EditorCoroutineはパッケージマネージャーからインストールする必要あり)
実際にEditorCoroutineUtilityとProgressを使って、
エディタ拡張で非同期処理を行い、その進捗を表示してみると以下のような感じに。
一応EditorUtility.Display(Cancelable)ProgressBarで代用出来ない事もないですが、
進捗表示に画面を専有しない、エラーが出ても自動で停止するなど、
使い勝手はProgressの方が良さそうでした。