【Unity】Unity Searchのクエリチートシート

Unity Searchのクエリのチートシートです。

Unity 2021.3.13f1

Unity Searchの概要

Unity SearchはUnityプロジェクト内のアセットを検索するための機能です。
さまざまな条件を指定して目的のアセットを検索し、またSearchウィンドウに付属しているInspectorで検索したアセットをそのまま編集できたりします。

docs.unity3d.com

Unity2020まではQuick Searchという名前の別パッケージとして提供されていましたが、Unity2021から組み込みパッケージとなりました。

基本的な使い方とインデックスのビルド

基本的には使い方としてはCtrl + K (Command + K)を押下して開く検索ウィンドウにクエリを入力するだけです。

クエリを入力

クエリの仕様については全てまとめると複雑なので、事例を見て書きながら少しずつ覚えるのが早いと思います。
そのため本記事ではチートシートという形で、実用的だと思われるクエリをリスト化してまとめておきます(内容については随時追加する可能性があります)。

なお、アセット同士の依存関係の検索やサブオブジェクト(シーンのオブジェクト・FBXのサブアセット)の検索をする場合には、あらかじめ以下の手順でインデックスを構築しておく必要があるのでご注意ください。

  1. Window > Search > Index ManagerからIndex Managerウィンドウを開く
  2. Options > Sub objects と Dependencies にチェックを入れる
  3. Buildボタンを押す(大きいプロジェクトだと時間がかかります)

インデックスのビルド

クエリチートシート - シーン検索

現在シーン上のオブジェクトを検索するにはクエリに h: をつけて Hierarchy プロバイダーを使用します。

Canvas/MainPanelというパスを持つGameObjectだけを検索
h: t=gameobject path=/canvas/mainPanel
Canvas/MainPanel配下の全GameObjectを検索
h: t=gameobject path:/canvas/mainpanel/
CameraあるいはLight型のコンポーネントを検索
h: t=camera or t:light

以下でもOK

h: t=[camera, light]
全てのポイントライトを検索
h: t=light #type=point
頂点数が100以上のメッシュを持つMeshRendererを検索
h: t=meshrenderer vertices>=100
面の数が10以上100以下のメッシュを持つMeshRendererを検索
h: t=meshrenderer faces>=10 and faces<=100
頂点数が100以下のメッシュを持つMeshRendererのパスを全てログ出力
print{select{h: t=meshrenderer vertices<=100, @path}}
CharacterPool/Character001配下の全ての頂点数を足し合わせる
sum{select{h:t=gameobject path:"/CharacterPool/Character001", vertices}}
RaycastTargetがtrueになっているTextあるいはTextMeshProUGUIを検索
h: t=[text, textmeshprougui]  #raycasttarget=true
ワールドのY座標が0未満のTransformを検索
h: t:transform y<0

以下でもOK

h: t:transform position<(,0,)
ローカルのY座標が0未満のTransformを検索
h: t:transform #m_LocalPosition.y<0

以下でもOK

h: t:transform #m_LocalPosition<(,0,)
Camera / Light / MeshRendererのそれぞれの合計数を取得
count{...h:t=[camera, light, meshrenderer]}
レイヤーがDefaultでタグがMainCameraのGameObjectを取得
h: t:gameobject layer=0 tag=maincamera
パスにArt/Materials/Characters/を含むマテリアルを検索し、現在のシーンにあるオブジェクトからそれぞれのマテリアルが参照されている数を取得し降順で並べる
sort{select{where{p:t:material, @path:Art/Materials/Characters/}, @path, count{h: ref=@path} as count}, @count, desc}

クエリチートシート - プロジェクト

プロジェクト内のオブジェクトを検索するにはクエリに p: をつけて Project プロバイダーを使用します。

全てのテクスチャとその横幅を検索
select{p:t:texture, @#width}
横幅が1024以上2048以下のテクスチャを全て検索して横幅降順に並べる
sort{where{p: t:texture, '@#width>=1024 @#width<=2048'}, @#width, desc}
テクスチャ一覧とその被参照数を取得
select{p: t:texture, @path, count{p: ref=@path} as count}
Aniso Levelが3に設定されているテクスチャを検索
eq{p: t:texture, @#aniso, 3}

eq以外にも gt (greater than), gte (greater than equal), lw (lower than), lwe (lower than equal), neq (not equal) がある

全てのアセットサイズを降順で並べる
sort{a:assets, @size, desc}
名前にcloudを含むマテリアルを参照している、シーン以外のアセットを全て取得
p: ref={t=material cloud} -t=scene
名前に cloud あるいは ellen を含むマテリアルを全て検索
p: t=material (cloud or ellen)
指定したシェーダを参照しているマテリアルを全て検索
p: t:material shader=Assets/3DGamekit/Art/Shaders/Rock.shader
ellenという名前を含むマテリアルを参照するPrefabを全て検索
p: t=prefab ref={t:material ellen}
横幅が4096以上のテクスチャを参照するアセットを全て検索
ref={where{p: t:texture, @#width>=4096}}
Assets/Textures/Effects あるいは Assets/Textures/Environment 配下にあるテクスチャを全て取得
where{t:texture, @path:Assets/Textures/Effects or @path:Assets/Textures/Environment}
EmissionのBurstCountが1以上のParticle Systemを検索
where{p: t:ParticleSystem, @#EmissionModule.m_BurstCount>=1}
Prefab、テクスチャ、マテリアルの総数をそれぞれ取得
count{...t:[prefab, texture, shader]}
テクスチャの各型(Texture2D, Texture3D, Cubemap, etc..)ごとの総数を取得
count{...groupBy{p: t=texture, @type}}

その他

graphicsを含む設定項目(Project設定やPreferences)を検索
set: graphics
Charactersという名前のフォルダ配下にあるアセットを全て検索
dir:Characters
Unityエディタでパフォーマンスをトラッキングされている全ての項目とその統計を表示
performance:

参考

docs.unity3d.com