yotiky Tech Blog

とあるエンジニアの備忘録

Unity - ブレークポイントで停止した時にHierarchyの状態を確認したい

Visual Studioブレークポイントスクリプトを停止した場合、Unity Editor はフリーズしてしまうので Hierarchy は確認できない。
デバッグを続行すると次のブレークポイント、もしくは Editor が再生中の状態に移るので、手遅れになってしまう。

ブレークポイント時の正確な状態で確認するのは難しそうなので、なるべく近い状態で Editor をポーズする方法を以下に記載する。

Debug.Break()

Editor をポーズするには Debug.Break() を利用する。 Debug.Break() は Editor でポーズした時と同様に一時停止することができる。
注意が必要なのは呼び出した瞬間ではなく、呼び出したフレームが終わり、次のフレームに入る前にポーズされること。

someiyoshino.info

イミディエイトウィンドウ

手っ取り早く現在のフレーム後に状態を確認したい場合は、Visual Studioにはイミディエイトウィンドウがあるので、ブレークポイントデバッグを止めた後 Debug.Break() を呼ぶ。

f:id:yotiky:20210704000831p:plain

これで次のフレーム開始前に、Editorがポーズ状態で待ち構えてくれる。

1フレーム待つ

もう少しスクリプトの途中の状態で確認したい場合は、1フレーム待つことで確認できる場合がある。
オブジェクト間で複雑に状態が絡み合ってる場合には難しいだろうが、処理がクラスやメソッドに閉じている場合には使えるかもしれない。

Debug.Break();
await UniTask.DelayFrame(1);

呼ばれる頻度が高すぎる場合は、以下のようにしておいて必要なタイミングでイミディエイトウィンドウを使って true にしてしまう。

var isBreak = false;
if (isBreak)
{
    Debug.Break();
    await UniTask.DelayFrame(1);
}