画像やMaterialを「どこで使っているか」調べるなら、Projectで素材を右クリックし、Find Reference in Projectを使います。選択したPrefabが「何を使っているか」はSelect Dependencies、開いているSceneの使用箇所はFind Reference in Sceneです。まず検索する向きと範囲を分けます。
現在の手順はUnity 6.3 LTS(6000.3)の公式資料を基にしています。旧版向けのQiitaスクリプトとReferenceViewerは後半に分けます。今回の改稿ではUnity Editorでメニュー・検索結果・旧ツールのコンパイルを実行確認していません。少数の既知の参照で結果を確認してから素材整理へ使ってください。
「どこで使う」と「何を使う」の違い
| 目的・条件 | 使う機能・確認する結果 |
|---|---|
| 素材を使う側を調べる | 画像やMaterial→参照するPrefab等。Find Reference in Projectで使用候補を調べる。 |
| Prefab等の依存先を調べる | Prefab→Material→Texture等。Select Dependenciesで依存するAssetを選ぶ。 |
| 開いているSceneのObjectを調べる | Find Reference in SceneやHierarchy検索。保存済みScene Assetの検索と区別する。 |
| 直接・間接の参照 | Prefab→Materialが直接、Material→Textureを経由するPrefab→Textureは間接。検索機能の範囲に応じて結果が違う。 |
| 未使用かを判断する | 検索0件だけでは削除可にならない。検索対象・更新状況・動的読み込み・ビルドの条件を別に調べる。 |
Unity 6.3の公式の参照検索にはProject内の逆引きも含まれます。「標準機能では逆引きできず、外部ツールが必須」という元記事の説明は現在の手順から外しました。ここでの参照方向は上下流という言葉だけで表さず、素材を使う側と依存先で区別します。
1. 少数の既知の参照で検索を準備する
- Assets/ReferenceTestへコピーしたIcon.pngを置きます。これを使うUI Image等を作り、KnownUser.prefabとして保存します。別に参照しない比較用Prefabも作ります。画像がMultipleなら、使用したSpriteと親PNGの違いを記録します。
- そのPrefabを配置したSceneを保存し、ProjectのAsset検索と開いているHierarchyの検索を比べられる状態にします。名前・保存先・参照しているInspectorのプロパティを記録します。
- 最初はPlay Modeへ入らず、Scene/Prefabを保存します。検索に出てほしい対象と出てほしくない比較用対象を決め、以後の結果を照合します。
これは再現確認用の構成例で、作成・検索済みの結果ではありません。実際にはUnity版、Assetパス、直接/間接、Prefab/Sceneの保存状態、インデックス設定、検索日時を記録します。結果の件数や高速化率を先に仮定しません。
2. Project内で素材を使うAssetを検索する
- ProjectでIcon.pngやMaterialなど、使う側を知りたいAssetを選びます。名前が同じ別Assetと取り違えないよう保存先を確認します。
- 右クリックしてFind Reference in Projectを実行します。標準機能はReference(単数)で、旧拡張のFind References In Projectとは別です。
- 開いたSearchウィンドウのクエリと検索対象を確認します。結果から既知のPrefabを開き、Inspectorのどのプロパティが対象素材を参照しているかを照合します。
- 使われているはずのAssetが出なければ、検索を広げる前に保存状態・対象Provider・直接/間接・インデックスの更新を確認します。Scene内のObjectを知りたいときは次のScene検索を使います。
パスを指定する公式の依存フィルターはref:<Assetのパス>です。たとえば検証用素材のクエリ候補はp: ref:Assets/ReferenceTest/Icon.pngで、これは未実行の例です。まず標準メニューが作るクエリを確認してください。空白を含むパスやサブAssetは使用版の検索結果と照合します。名前だけのref検索は同名・部分一致の別素材を含み得るため、検索対象のパスを必ず確認します。
公式のAdditional Search filtersはAssetの直接依存を説明しています。直接PNGを参照するPrefabと、Material等を経由するPrefabを同じ結果として期待しないでください。間接の経路を知りたい場合は、見つかったMaterial等を次の検索対象として追うか、依存先の一覧と照合します。
3. Unity 6.3の検索インデックスを確認する
Unity 6.3からの公式インデックス説明は単一の検索インデックスを採用しています。以前のIndex Managerで複数のインデックスを作る手順をそのまま6.3へ当てはめないでください。Assetの依存検索と、Prefab/Scene内部のComponent・プロパティ検索も別に扱います。
- WindowsではEdit > Preferences > Searchを開きます。macOSではUnity > Settings > Searchです。Indexingの設定を確認します。
- Prefab/Scene内部のプロパティまで調べる必要がある場合は、Deep scene and prefab indexingを検討します。公式では初期状態で無効で、通常より時間がかかる設定です。Assetレベルの逆引きが0件だからという理由だけで無条件に有効化しません。
- Packages内も検索する必要がある場合はPackages indexingの範囲を確認します。通常の初期設定ではPackage内容、Prefab内部、Scene全体の内容を除外する条件があります。
- 設定変更後はインデックスの処理が終わってから、同じ既知の対象で再検索します。全Projectの内部Objectが網羅されたと即断しません。
細かな設定はUnity 6.3 Search preferencesを参照してください。旧バージョンではIndex ManagerやDependenciesの設定が異なるため、自分の使用版の資料へ切り替えます。本文の6.3手順と旧ツールのキャッシュ更新は同じ仕組みではありません。
4. 開いているSceneで使うObjectを調べる
- Projectで素材を選び、Find Reference in Sceneを実行します。Hierarchy側で絞られた結果と、開いているSceneの範囲を確認します。
- 目的のObjectを選び、Inspectorの参照プロパティと素材のパスを照合します。名前が似たObject、子Object、非Activeな対象も目的の確認に含まれるか調べます。
- 保存前後や複数Sceneを開いた状態で結果が変わる場合は、どのSceneが開いていたかと保存状態を記録します。開いていないProject内の全Sceneをこの操作だけで調査したことにはしません。
Hierarchy search providerの公式資料にはref:を使う参照の絞り込みがあります。Project検索のp:とHierarchy検索のh:は対象が違います。型や名前の検索結果だけでは、そのObjectのどのフィールドが参照しているかまで確定しないのでInspectorへ戻ります。
5. Prefab等が使う素材をSelect Dependenciesで選ぶ
- ProjectでKnownUser.prefab等の参照元を選び、右クリックからSelect Dependenciesを実行します。
- Project内で選択されたAssetのパスと種類を確認します。TextureだけでなくMaterial、Script、Model等が含まれる場合があります。
- 知りたい素材が間接参照かどうかは、PrefabのInspector、使用MaterialのTexture等を順に確認します。この操作は素材から使うPrefabを逆引きする機能ではありません。
スクリプトで調べる場合のAssetDatabase.GetDependenciesは、recursive=falseなら直接、trueなら間接を含みます。再帰ありの結果は入力Asset自身も含みます。Sceneから取得しても、ディスク上のAssetの依存先であり、各GameObjectの一覧ではありません。依存一覧とPlayerビルドに必要な全素材は同義ではありません。
旧版向け:QiitaのFindReferencesInProject
作者のQiita記事は2017年・Unity 5.5.2f1の拡張です。作者掲載コードを確認すると、SceneとPrefabを列挙し、各GetDependenciesの結果と選択素材をGUIDで比較して専用EditorWindowへ表示します。現在の標準検索を先に試し、古いProjectで必要な場合だけ別のコピーProjectへ導入候補としてください。
- 作者記事の環境とコード全文を確認します。FindReferencesInProject.csをAssets/Editorへ置く場合は、同名クラスや同じMenuItemを持つ別拡張がないか確認します。Consoleの最初のコンパイルエラーを解決してから試します。
- Projectの素材を選び、Assets/Find References In Projectから実行します。作者コードは専用ウィンドウの結果を表示し、項目をクリックすると参照候補Assetを選択します。今回この操作は未実行です。
- 既知のScene/Prefabで結果を照合します。コードの対象はScene/Prefabで、すべてのMaterialやScriptableObjectを参照元として独立列挙する検索ではありません。GetDependenciesの再帰結果により間接参照も含み得ます。
この旧コードのAssetDataはGUIDで同一性を比較しています。同じ画像ファイルに含まれる複数Sprite等をlocal file IDごとに区別する判定ではありません。結果を特定のSpriteや特定のComponentからの直接参照だと断定せず、参照元を開いて確認します。現在版でのコンパイル、速度、全対象の検出は未確認です。
旧版向け:ReferenceViewerのキャッシュと副作用
作者のReferenceViewerリポジトリのREADMEはUnity5対応という旧情報です。取得したEditor/ReferenceViewer.csではWindow/ReferenceViewerとUpdateがあり、検索にbuild/ReferenceViewer/data.datを使用します。大規模Projectだから必ず速い、Unity 6.3でそのまま動くという保証はしません。
作者コードのCreator/Generate/SceneAssetDataを確認すると、キャッシュ作成はSceneを開いて調べ、保存確認や元のSceneを開き直す処理を伴います。Assets/Test.assetも生成し、データファイルを書き替えます。読むだけの標準Searchと同じ作業ではありません。未保存のSceneや同名Assetを含む実Projectへそのまま導入する手順にはしません。
- 必要な旧Projectのコピーで、Sceneを保存し、変更前のファイルと開いているSceneの構成を記録します。作者リポジトリのEditor一式を配置する場合は、既存拡張との重複を確認します。
- Consoleでコンパイルの可否を確認し、Window > ReferenceViewerを開きます。Updateはキャッシュ生成で、Sceneの読み替えや追加ファイルが起こり得るため、コピー環境で実行します。
- 素材を選び旧Find References In Projectから検索します。結果をInspectorと照合し、素材の追加/削除/参照変更後はキャッシュの再作成が必要かを確認します。
- エラー時は最後までキャッシュが完成したと判断しません。コピーProjectの変更ファイル・Scene状態を調べ、復元する場合はツール導入前の状態へ戻して確認します。
取得時点のソースには内部APIやUnityEngine.dll名によるReflection等もあります。現在版への修正はこのメニューの属性変更だけでは完了しません。今回リポジトリを書き換えたりUnityへインストールしたりしていません。
旧ツールのメニューを分ける:Ctrl+Fを割り当てない
元記事のCtrl+F固定割当例は外しました。標準検索や他の拡張と衝突し得るため、まずメニューから実行します。2つの旧ツールを検証する場合は、同名のAssets/Find References In Projectを別パスへ変更する方法があります。以下は作者コード内の属性をそれぞれ置き換える例で、単独で動くスクリプト全文ではありません。
Qiita版:IsEnabledとSearchの上にある属性を、それぞれ次のパスへそろえます。2行を同じメソッドへまとめて追加しません。
// Qiita版の2つのMenuItemを、それぞれ元のメソッドの上で変更します。
// 検証メソッド IsEnabled の属性
[MenuItem("Assets/Legacy Tools/Qiita Find References", true)]
// 実行メソッド Search の属性
[MenuItem("Assets/Legacy Tools/Qiita Find References", false, 25)]
ReferenceViewer版:FindValidateとFindの属性を、それぞれ次の別パスへそろえます。Window/ReferenceViewerの属性は別のウィンドウ表示用です。
// ReferenceViewer.csの2つのMenuItemを、それぞれ変更します。
// 検証メソッド FindValidate の属性
[MenuItem("Assets/Legacy Tools/ReferenceViewer Find References", true)]
// 実行メソッド Find の属性
[MenuItem("Assets/Legacy Tools/ReferenceViewer Find References")]
この変更は検索処理の対象や旧APIを修正するものではありません。必要なキーを後から割り当てる場合も、使用版のShortcuts設定と既存割当を確認し、検索ウィンドウやProjectをフォーカスしたときの動作を別々に試します。今回キー操作・メニュー表示は未確認です。
結果が出ない・多すぎるときの切り分け
| 目的・条件 | 使う機能・確認する結果 |
|---|---|
| 使われているはずなのに0件 | 素材パス・同名Asset・直接/間接・保存状態・Provider・インデックスの処理完了を順に確認。 |
| Scene内のObjectが出ない | ProjectのAsset検索とHierarchy検索を区別。開いているSceneと深い内部検索の設定を確認。 |
| 同じPNGの別Spriteも出る | ファイル単位の参照とサブAssetの個別参照を区別。Sprite名だけでなくInspectorの実参照を確認。 |
| 大量の結果が出る | 素材名の部分一致と実パス、直接/再帰、検索対象を確認。結果を全て直接参照と呼ばない。 |
| 参照変更が反映されない | 保存と検索インデックス更新、旧ReferenceViewerのキャッシュ再生成を別々に確認。 |
| 旧ツールでコンパイルエラー | 使用版/Editor配置/重複クラス/MenuItem/旧APIを確認。標準検索へ戻り、現在対応済みとは扱わない。 |
0件は「この検索条件で見つからなかった」という結果です。Resources.Load等の文字列による読み込み、Addressablesの設定やキー、外部からロードするBundle、Editor専用処理などは、単一の参照検索だけでは用途を判断できません。ビルド設定やコード、対象機でのロードを確認してから不要素材の処置を決めます。低PVや古いAssetという理由で削除する作業とは別です。
Prefabの構造と素材参照を分けて調べる
Nested Prefab/Variantの関係を整理する場合はPrefab参照グラフ、Prefabの内部Object一覧はPrefab構造CSVへ。これらは全Assetの未使用判定ツールではありません。画像設定はPreset Manager、画像をまとめる工程はSprite Atlasと役割を分けます。

元記事のコード保管先は旧GitHubコードです。今回作者の2つの旧ツールと保管先を現在版対応へ更新したわけではありません。操作例の基準版、実行したクエリ、検索対象、結果、参照元Inspectorを保存して検証してください。
環境設定の記事は、ほかにもあります。




