ついにUnity 2018.3のベータが開始しました。
今回はソコで追加された「コンポーネントを参照しているオブジェクトを見つけ出す」方法について紹介します。
シーン内の参照を検索
Unity 2018.3よりコンポーネントのコンテキストメニューに「Find references in scene(シーン内の参照を検索)」の項目が追加されました。
この機能を使用すると、実行したコンポーネントを(Inspector上で)参照しているオブジェクトを見つけ出す事が出来ます。
例えば
- GameManagerとPlayerというコンポーネントがある
- PlayerはGameManagerを参照している
gist.github.comといったケースの場合、GameManagerのコンポーネントで「シーン内の参照を検索」を実行すれば、GameManagerを参照している全てのオブジェクトを見つける事が出来ます。
見つかるのはInspectorで設定されている場合のみ
この検索機能ですが、残念ながらInspectorで設定可能な場合のみ有効に利用することが出来ます。
言い換えると、ランタイムでprivateなフィールドやpublicなプロパティにセットした値は今回のアプローチでは表示出来ません。
この場合はProfiler経由で探す必要があります。
実はUnity 2018.3以前も使えた
この機能ですが、実はUnity 2018.2以前も使えました。
いつから使えたかは覚えてないですが、以下の手順で同じようなことを実現出来ます。
- InspectorをDebugモードに変更
- Instance IDを確認
- 検索にて「ref:インスタンスID:」と入力(コロンで数字を囲う)
例えばInstance IDが-8294のオブジェクトを参照しているオブジェクトを探す場合、「ref:-8294:」と入力します。
今回の機能は、この操作がUI的に整備された形になります。
Prefabの子オブジェクトも表示されてしまう
この挙動で少し罠なのが、Prefabの子Prefabも表示されてしまう点です。例えばGameManagerを参照するキャラクターがカプセルを持っている…といった状態の場合、カプセルは特にGameMangerを参照していなくても親が参照しているため、一覧に表示されてしまいます。
まぁ、用法用量を守って正しくお使い下さい…ということで。