この 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 Manager(Window > Search > Index Manager)からデフォルトのインデックスを調整することで、インデックス作成されるデータ量を増やすことができます。
Properties と Dependencies の両方にインデックスを追加することで、上に示したように新しい Search Picker ワークフローと Table ワークフローを最大限に活用することができます。
次の大きな改善点は Save Searches ワークフローを以前より強力にするためのさまざまな取り組みです。同じクエリを何度も何度も入力するのは面倒なので、それに対応するためにまったく新しいオーガナイザーを追加しました。
環境設定に保存され、自分だけに使える User Searches や 、プロジェクトのアセットとして保存され、プロジェクトに参加しているすべての人と共有される Project Searches が使えるようになりました。検索にアイコンを紐づけ、新しく追加された Search ウィンドウで Searches を開くことができます。Search ウィンドウの全体の状態は検索結果に紐づいた形で保存されます。つまり、クエリテキスト、アイコンのサイズ(特に Table レイアウトで)、現在選択されている検索タブが常に保存されるということです。
Search ウィンドウではさまざまな方法でオブジェクトを視覚化できます。コンパクトなリスト表示、大きなリスト表示、さまざまなサイズのアイコンをグリッドにして並べた表示などが使えます。
Unity 2021.2 では、クエリの検索結果項目をテーブルビューで視覚化することができます。
これは名前や詳細情報で項目を並び変えたいときに便利です。そして Search Expression を使って Search Item からプロパティを抽出して、および以下のような Column レイアウトを作ることで、この機能はさらに便利になります。
もしコラムレイアウトの設定に大きな時間をかけたところで、そうして出来たレイアウトを保存できないのであれば有用とは言えません。前述したように、列の指定を含む Search ウィンドウの全体の状態は、検索の際にも維持されます。これで皆さんは複数のプロパティの値を互いに比較するときに便利な、独自の「データエクスプローラー」を持つことができます。
Table Column レイアウトを設定すると、保存 アイコンからこのすべての情報を CSV または JSON ファイルに保存し、詳細なレポートを作成することができます。この機能は同じプロジェクトの複数のバージョンをレビューしたり、対照させて比較したりするときに特に便利です。
次に紹介する機能は Unity に少し習熟したユーザーで、アセットやゲームオブジェクトなど、Unity でオブジェクトを精密に選択する方法が欲しいと考えているユーザーに歓迎されるものかと思います。Search ウィンドウを従来の Object Picker の代わりに使えるようになりました。これでコードから特定の Script プロパティがどのように選択されるべきかを定義できるようになります。
任意の Object 参照プロパティを新しく追加された [SearchContextAttribute] を使って装飾することができます。クエリや、初期のさらに制約のあるクエリや、Search Picker の見た目を変更するための Search View Flag を指定することができる、Search Provider のセットを指定することができます。
上のように指定すると、下の画像のようになります。
Search Picker で最初のクエリがどのように設定され、ビューにアイコンのグリッドがどのように表示されているかに注目してください。
最後に Search Expression の概念を紹介します。Search Expression は Query Language を拡張し、よりパワフルでカスタムしやすいようにするものです。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 であると考えてください。また、avg、select、distinct などの評価子はすべて項目のストリームに何らかの処理をかけるものと考えてください。すべての評価は Unity のバックグラウンドのスレッドで行われるので、実行する必要のあるクエリの複雑さや数に関わらず、Search ウィンドウは可能な限り反応する状態で居続けようとします。
Search Queries はこうした長い検索式を保存し、同じ検索を再度行うときに式全体を再度タイプせずに実行できるようにする便利な手段です。
この記事でご紹介したすべてのワークフローは Unity エディターの公式ドキュメンテーションでカバーされています。
また、公開の GitHub レポジトリを立ち上げており、そこですべての種類のクエリのサンプルと、Search エコシステムに基づくプロトタイピングツールを提供しています。
私たちの Wiki にも強力な Search ワークフローのすべてを詳細に解説した記事や、Search Expression の複雑な部分まで詳細に解説したセクションが掲載されています。
Query Examples のページでは Unity 2022.1 の Search に提供される新機能を先取りして見ることができます。
Unity 2022.1 に向けて開発中の内容についてさらに知りたい方は、ベータ版ローンチ時のブログ記事をご覧ください。
Is this article helpful for you?
Thank you for your feedback!