テラシュールブログ

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

【Unity】コンポーネントを参照しているオブジェクトを見つけ出す方法

ついにUnity 2018.3のベータが開始しました。
今回はソコで追加された「コンポーネントを参照しているオブジェクトを見つけ出す」方法について紹介します。

 

 

シーン内の参照を検索

Unity 2018.3よりコンポーネントコンテキストメニューに「Find references in scene(シーン内の参照を検索)」の項目が追加されました。
この機能を使用すると、実行したコンポーネントを(Inspector上で)参照しているオブジェクトを見つけ出す事が出来ます。

f:id:tsubaki_t1:20180912234828g:plain

例えば

gist.github.comといったケースの場合、GameManagerのコンポーネントで「シーン内の参照を検索」を実行すれば、GameManagerを参照している全てのオブジェクトを見つける事が出来ます。

 

見つかるのはInspectorで設定されている場合のみ

この検索機能ですが、残念ながらInspectorで設定可能な場合のみ有効に利用することが出来ます。
言い換えると、ランタイムでprivateなフィールドやpublicなプロパティにセットした値は今回のアプローチでは表示出来ません。

この場合はProfiler経由で探す必要があります。

tsubakit1.hateblo.jp

 

実はUnity 2018.3以前も使えた

この機能ですが、実はUnity 2018.2以前も使えました。
いつから使えたかは覚えてないですが、以下の手順で同じようなことを実現出来ます。

  • InspectorをDebugモードに変更
  • Instance IDを確認
  • 検索にて「ref:インスタンスID:」と入力(コロンで数字を囲う)

例えばInstance IDが-8294のオブジェクトを参照しているオブジェクトを探す場合、「ref:-8294:」と入力します。

f:id:tsubaki_t1:20180913000544p:plain

今回の機能は、この操作がUI的に整備された形になります。

 

Prefabの子オブジェクトも表示されてしまう

この挙動で少し罠なのが、Prefabの子Prefabも表示されてしまう点です。例えばGameManagerを参照するキャラクターがカプセルを持っている…といった状態の場合、カプセルは特にGameMangerを参照していなくても親が参照しているため、一覧に表示されてしまいます。

f:id:tsubaki_t1:20180913001746p:plain

まぁ、用法用量を守って正しくお使い下さい…ということで。

 

関連

baba-s.hatenablog.com