Unity を検索

Unity 2021.2 における Search 機能の最新情報

2022年1月19日 カテゴリ: テクノロジー | 9 分 で読めます
3 spheres on black background
3 spheres on black background
取り上げているトピック
シェア

この 1 年で Search には多くの変更が加えられました。かつては Unity オブジェクトを名前で検索することに重点を置いた Quick Search パッケージが使われていましたが、現在は Search ワークフローがコアに組み込まれ、さまざまな基準を使った検索を行ったり、自分の検索結果を保存したり、項目を表にして見直したり、LINQ のような言語を使って非常に複雑なクエリを使ったりすることができるようになっています。

バージョン 2021.1 から、Search は Unity のコアワークフローになっています。ワークフローがエディターに組み込まれているので、パッケージを手動でインストールする必要はありません。

このツールは、2、3 文字入力して返ってきたオブジェクトのセットを使って作業を行うか、またはもっと複雑なクエリを作成するかのいずれかの方法で効率的に使うことができます。Unity 2021.2 に搭載されている Search の最新バージョンではいくつもの大幅な改良が施され、生産性を確保しています。ここから後は変更点について説明します。

* なお、Quick Search パッケージには、Unity 2020.3 で動作し、コアに組み込まれたバージョンとほぼ同じ機能を備えた実験的なプレビュー版があります。最新のプレビューパッケージをインストールするには、Project Settings を開き、Preview Packages を有効にする必要があります。

インデキシングのパフォーマンス向上

アセットインデキシングシステムの性能がこれまで以上のものになりました。初期のインデックス作成にかかる時間とスペースが少なくて済むだけでなく、Index ManagerWindow > Search > Index Manager)からデフォルトのインデックスを調整することで、インデックス作成されるデータ量を増やすことができます。

Unity Search indexing

PropertiesDependencies の両方にインデックスを追加することで、上に示したように新しい Search Picker ワークフローと Table ワークフローを最大限に活用することができます。

保存済み検索の整理

次の大きな改善点は Save Searches ワークフローを以前より強力にするためのさまざまな取り組みです。同じクエリを何度も何度も入力するのは面倒なので、それに対応するためにまったく新しいオーガナイザーを追加しました。

Unity saved search organization

環境設定に保存され、自分だけに使える User Searches や 、プロジェクトのアセットとして保存され、プロジェクトに参加しているすべての人と共有される Project Searches が使えるようになりました。検索にアイコンを紐づけ、新しく追加された Search ウィンドウで Searches を開くことができます。Search ウィンドウの全体の状態は検索結果に紐づいた形で保存されます。つまり、クエリテキスト、アイコンのサイズ(特に Table レイアウトで)、現在選択されている検索タブが常に保存されるということです。

Search Table ビュー

Search ウィンドウではさまざまな方法でオブジェクトを視覚化できます。コンパクトなリスト表示、大きなリスト表示、さまざまなサイズのアイコンをグリッドにして並べた表示などが使えます。

Unity 2021.2 では、クエリの検索結果項目をテーブルビューで視覚化することができます。

これは名前や詳細情報で項目を並び変えたいときに便利です。そして Search Expression を使って Search Item からプロパティを抽出して、および以下のような Column レイアウトを作ることで、この機能はさらに便利になります。

もしコラムレイアウトの設定に大きな時間をかけたところで、そうして出来たレイアウトを保存できないのであれば有用とは言えません。前述したように、列の指定を含む Search ウィンドウの全体の状態は、検索の際にも維持されます。これで皆さんは複数のプロパティの値を互いに比較するときに便利な、独自の「データエクスプローラー」を持つことができます。

Table Column レイアウトを設定すると、保存 アイコンからこのすべての情報を CSV または JSON ファイルに保存し、詳細なレポートを作成することができます。この機能は同じプロジェクトの複数のバージョンをレビューしたり、対照させて比較したりするときに特に便利です。

Search Picker

次に紹介する機能は Unity に少し習熟したユーザーで、アセットやゲームオブジェクトなど、Unity でオブジェクトを精密に選択する方法が欲しいと考えているユーザーに歓迎されるものかと思います。Search ウィンドウを従来の Object Picker の代わりに使えるようになりました。これでコードから特定の Script プロパティがどのように選択されるべきかを定義できるようになります。

任意の Object 参照プロパティを新しく追加された [SearchContextAttribute] を使って装飾することができます。クエリや、初期のさらに制約のあるクエリや、Search Picker の見た目を変更するための Search View Flag を指定することができる、Search Provider のセットを指定することができます。

上のように指定すると、下の画像のようになります。

Search Picker で最初のクエリがどのように設定され、ビューにアイコンのグリッドがどのように表示されているかに注目してください。

Search Expression

最後に Search Expression の概念を紹介します。Search Expression は Query Language を拡張し、よりパワフルでカスタムしやすいようにするものです。Search Expression は以下の使い方ができます。

  • 複数の検索プロバイダーをまたがって参照し、同時に複数のクエリを実行することもできる単一の文からなるクエリを記述する。
    • たとえば「現在のシーンでコンパイルしないシェーダーを参照しているオブジェクトをすべて返す」など。
  • 1 つのクエリによって返された項目のセットに対して、変形やフィルターを適用する。LINQ が SQL を取り込み、さらに Lisp を取り込んだような動作(S 式文法)。
    • sort{count{...groupby{a:assets, @type}}, @value, desc}
    • select{t:LODGroup, @lodsize}
  • Search Table ワークフローと組み合わせて、Search Expression を使ってユーザーがプロジェクトに対して複雑なクエリを実行し、この情報を表形式で表示する。Search Expression は継続的インテグレーションやバリデーションシステムのバックボーンとして使うことができる。

あまりにも膨大な内容を含む話題なので、ここで Search Expression の文法についてあれこれと解説することはしませんが、代わりにどのような種類のクエリを実行できるのかを(その良し悪しは置いておいて)少しお見せしたいと思います。

「rock」という名前のテクスチャを参照しているすべてのプレハブを検索するには、以下のようなクエリを実行します。

t:prefab ref={t:texture rock}

これを実行すると、システムが t:texture rock というクエリを実行し、次にこのクエリにヒットしたテクスチャに対して t:prefab ref= というクエリを実行します。これらのクエリの結果がまとめられて、最終的な検索結果となります。

プロジェクト内のアセットの種類の数を数えるには、以下のクエリを実行します。

count{t={distinct{select{a:assets, @type}}}}

プロジェクト内のすべての LODGroup アセットの LODSize の平均値を計算するには、以下のクエリを実行します。

avg{select{t:LODGroup, @lodsize}}

波かっこで囲まれた部分は基本的に Search Expression であると考えてください。また、avgselectdistinct などの評価子はすべて項目のストリームに何らかの処理をかけるものと考えてください。すべての評価は Unity のバックグラウンドのスレッドで行われるので、実行する必要のあるクエリの複雑さや数に関わらず、Search ウィンドウは可能な限り反応する状態で居続けようとします。

Search Queries はこうした長い検索式を保存し、同じ検索を再度行うときに式全体を再度タイプせずに実行できるようにする便利な手段です。

フィードバックと詳細情報

この記事でご紹介したすべてのワークフローは Unity エディターの公式ドキュメンテーションでカバーされています。

また、公開の GitHub レポジトリを立ち上げており、そこですべての種類のクエリのサンプルと、Search エコシステムに基づくプロトタイピングツールを提供しています。 

私たちの Wiki にも強力な Search ワークフローのすべてを詳細に解説した記事や、Search Expression の複雑な部分まで詳細に解説したセクションが掲載されています。

Query Examples のページでは Unity 2022.1 の Search に提供される新機能を先取りして見ることができます。

Unity 2022.1 に向けて開発中の内容についてさらに知りたい方は、ベータ版ローンチ時のブログ記事をご覧ください。

2022年1月19日 カテゴリ: テクノロジー | 9 分 で読めます
取り上げているトピック