(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]



EditorUtility.DisplayCancelableProgressBarで途中でキャンセルも出来る進捗状況(プログレスバー)の表示【Unity】【エディタ拡張】


このエントリーをはてなブックマークに追加


この記事でのバージョン
Unity 2018.4.19f1


はじめに

以前、エディタ拡張で進捗状況を表示するUI、

いわゆるプログロレスバーの実装方法について紹介した事がありました。

f:id:kan_kikuchi:20161020133330g:plain


今回はこれの途中でキャンセルできるバージョンのご紹介です!

イメージとしては以下のような感じ。

f:id:kan_kikuchi:20200330091721g:plain



DisplayCancelableProgressBar

キャンセル出来るプログレスバーを表示したい時は

EditorUtility.DisplayCancelableProgressBarを使うと簡単に実装が出来ます。



使い方は以下のようにDisplayCancelableProgressBarを呼ぶだけ。

ただし引数でキャンセルされたか(☓ボタンが押されたか)が取得出来るので、

それを使って処理を止める実装は別途必要になります。

float progress = 0;//進捗状況 0~1
bool isCancel = EditorUtility.DisplayCancelableProgressBar ("タイトル", "情報", progress);//プログレスバー表示


なお、処理が完了した後、EditorUtility.ClearProgressBarを実行し、

プログレスバーを削除しないと、永遠と表示され続けるので注意が必要です。

EditorUtility.ClearProgressBar(); 


ちなみに最初の例であったコードは以下の通りです。

int loopCount = 100;

for (int i = 0; i < loopCount; i++) {
  float progress = (float)i / loopCount;

  bool isCancel = EditorUtility.DisplayCancelableProgressBar("ループ中",
    i.ToString() + "回目(" + (progress * 100).ToString("F2") + "%)", progress);

  if (isCancel) {
    Debug.LogWarning($"{i}でキャンセルしました");
    break;
  }
}

EditorUtility.ClearProgressBar (); 
f:id:kan_kikuchi:20200330091721g:plain