まとめ
Windows なら Asset Store の「Emergency Exit」を使うと
Ctrl + Shift + Q で無限ループを止められるようになります
Visual Studio や JetBrains Rider を使っているなら
以下のいずれかの方法で無限ループを止められます
- ステートメントの設定で無限ループから抜ける
- イミディエイトウィンドウでループカウンタを操作して無限ループから抜ける
この記事では上記の方法を行う手順を紹介していきます
目次
- まとめ
- 目次
- 検証環境
- Asset Store の「Emergency Exit」を使う
- Visual Studio のステートメントの設定を使う
- Visual Studio のイミディエイトウィンドウを使う
- 参考サイト様
検証環境
- Windows 10
- Unity 2020.3.13f1
- Microsoft Visual Studio Community 2019 16.11.2
- JetBrains Rider 2021.1.3
Asset Store の「Emergency Exit」を使う
Windows であれば Asset Store で販売されている
「Emergency Exit」を購入して Unity プロジェクトに導入すると
using UnityEngine; public class Example : MonoBehaviour { private void Start() { while ( true ) { } } }
誤って上記のような無限ループを実行してしまっても
Ctrl + Shift + Q で無限ループを止められるようになります
Visual Studio のステートメントの設定を使う
using UnityEngine; public class Example : MonoBehaviour { private void Start() { int i = 0; while ( i < 10 ) { // i++ されていないので while が終わらない } Debug.Log( $"i = {i}" ); } }
上記のようにループカウンタのインクリメントを忘れているコードがあるとします
Unity を Debug Mode にした状態で Unity を再生します
無限ループに入ったら Visual Studio の「Unity にアタッチ」を実行して
ブレークポイントを設定します
そして、黄色の矢印をドラッグして無限ループの外に移動してから「続行」を押します
これで、ループカウンタの i の数値が 0 のまま無限ループを抜けることができます
黄色の矢印をドラッグする以外にもコードを右クリックして
「次のステートメントの設定」を押すことでも無限ループの外に移動できます
JetBrains Rider でも同様のことは可能です
Visual Studio のイミディエイトウィンドウを使う
Visual Studio メニューの「デバッグ > ウィンドウ > イミディエイト」を選択して
イミディエイトウィンドウを表示します
無限ループにブレークポイントを設定したらイミディエイトウィンドウで
無限ループを抜け出せるように変数の値を変更して「続行」を押します
上記の例ではループカウンタに 99 を設定して while を抜けられるようにします
これで、ループカウンタの i の数値が 99 になり無限ループを抜けることができます
JetBrains Rider でも同様のことは可能です
Update 関数の中で無限ループが発生している場合
Update 関数の中で無限ループが発生してしまう場合は
一度無限ループを抜け出してもすぐに次のフレームで無限ループに入ってしまいます
このような場合はイミディエイトウィンドウで Debug.Break()
を実行します
これで、無限ループを抜けた後に Unity が一時停止状態になるため、
Unity で問題の調査ができるようになります
イミディエイトウィンドウでできないこと
例外を投げたり return や break で無限ループを抜けることはできません