テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

【Unity】誤ってUnityエディタで無限ループ起こしても、Unityを強制終了させることなく復帰する「Panic Button」

f:id:tsubaki_t1:20151001045208p:plain

先日のUnity Tips(火曜日にUnityのTipsを#unitytipsタグと一緒にTwitterで紹介する)を眺めていた所、なんか凄いアセットが目につきました。

 詳細を確認したところ、かなり面白いアセットでした。

www.youtube.com

名前はPanic Buttonで、機能は大体こんな感じです。

  • Unityエディタで無限ループを起こした際、Shift+Escapeキーで一時停止、
    無限ループを中断
  • エディタ拡張でも無限ループ中にShift+Escapeで無限ループを中断
  • 停止時に実行していたクラスとメソッド名が分かる

    f:id:tsubaki_t1:20151001045516p:plain

  • 停止時に無限ループを起こしてたメソッドを持つオブジェクトが分かる

https://www.assetstore.unity3d.com/jp/#!/content/40167

 

実際に確認したところ、Unity 5.2で完璧に動作しました。

 

この「強制的に処理を中断出来る」超強力な機能は、実は無限ループだけでなく「単純に重すぎてエディタの応答が返ってこない」ようなケースでも機能します。

 

これは何らかの理由により負荷が跳ね上がり入力を受け付けなくなったケース、あと個人的にはエディタ拡張を行う時などです。

例えば「プロジェクト内のオブジェクトを全部検証して不必要なアセットをピックアップする」を以前作りましたが、プロジェクトの規模や内容によっては初回計算時30分くらい処理に時間がかかりました(2回目からはキャッシュを使って高速化します)、こういった「一度始まると中々終了できない処理」にキャンセルを付与できる訳です。

 

まぁ、一時ファイルとか作って使っていた場合はゴミが残る事があるので正しく処理を中断する機能を付けるべきではありますが、少なくとも作っているときはこのキャンセルボタンは非常に有りがたいです。

tsubakit1.hateblo.jp

ちなみに単一で糞重い処理は止められないみたいです。停止出来るのは「処理が終わって次の処理が始まるタイミング」です。

 

どうやってるのか知りたい場合、Editor/PanicButton/source.zip内にソースコードが含まれているので、それを見るのも面白いです。

通常は既にコンパイルされた状態で提供されています。これはビルド失敗時も動作出来るように、あとコンパイル時間短縮のためと思われます。

f:id:tsubaki_t1:20151001044713p:plain

tsubakit1.hateblo.jp

 関連

tsubakit1.hateblo.jp