【Unity】Unity Searchで複雑な検索をする時にはIndex Managerでインデックスを追加しよう

Unity Searchで複雑な検索をする時にはIndex Managerでインデックスを追加しようというお話です。

はじめに

Unityには複雑な検索を行えるUnity Searchという機能があります。

light11.hatenadiary.com

Unity Searchでは、アセットの型情報や各アセットにシリアライズされているプロパティの情報などをあらかじめビルドしておくことで複雑な検索を高速で行います。
これらの情報をインデックスと呼び、アセットに更新が入った時にはこのインデックスが都度差分更新される仕組みになっています。

デフォルトでは、インデックスは全てのアセットに対してビルドされます。
一方で、シーン内のオブジェクトやサブアセット、アセット間の依存関係の情報についてはデフォルトではビルド対象から除かれています。

これらの情報も設定をするだけでビルドはできるものの、正しく設定しないと大きいプロジェクトではビルドに多大な時間がかかってしまいます。
本記事ではインデックスを効率よくビルドして、アセット間の依存関係などの複雑な検索をスムーズに行う方法についてまとめます。

依存関係用のインデックスを作成・ビルドする

インデックスを作成するには、Window > Search > Index Manager からIndex Managerを開きます。
デフォルトのインデックスがAssetsという名前で登録されていることがわかります。

Index Manager

また、Optionsを開くと、上図の通りTypesPropertiesにだけチェックが入っていることを確認できます。
このOptionsのうちSub objectsにチェックを入れるとシーンのオブジェクトやサブアセットの情報が、Dependenciesにチェックを入れると依存関係の情報がビルドされます。

しかし、このAssetsインデックスに対してこれらのオプションをつけてしまうとプロジェクト内の全アセットがビルド対象となり、ビルドに時間がかかってしまいます。

そのため依存関係などをビルドするためのインデックスを追加します。
左ペインの+ボタン > Assetsを選択すると新しくインデックスが追加されるので、下図のように設定します。

Index Managerの設定

設定できたらCreateを押下して適当な場所にこのインデックスの設定ファイルを保存します。

この時にインデックスのビルドが行われるので、プロジェクトによってはビルドに時間がかかるかもしれません。
ビルドの進捗はUnity Editorの右下のボタンをクリックしてBackground Tasksウィンドウを開くことで見ることができます。

Background Tasks

依存関係を検索する

ここまででシーンのアセットやサブアセット、依存関係のビルドができたはずなので、依存関係の検索を行ってみます。
クエリの書き方は以下の記事にまとめていますので、必要に応じて参照してください

light11.hatenadiary.com

下図は名前にellenが含まれるマテリアルを参照するPrefabを検索したものです。

検索

検索結果が正常に得られていることを確認できました。

参考

docs.unity3d.com