Version: 2021.3
言語: 日本語
カスタムの検索プロバイダーの作成
検索プロバイダーの登録

SearchProvider クラス

SearchProvider クラスは、特定のタイプのアイテムの検索を実行し、サムネイル、説明、サブフィルターを管理します。

以下の基本 API を備えています。

public class SearchProvider
{
    public SearchProvider(string id, string displayName = null);

    // このプロバイダにバインドされたアイテムを作成します。
    public SearchItem CreateItem(string id, string label = null, string description = null, Texture2D thumbnail = null);

    // ユーティリティ関数。検索テキストが文字列と一致するかどうかをチェックします。
    public static bool MatchSearchGroups(string searchContext, string content);
    public static bool MatchSearchGroups(string searchContext, string content.); // 検索文字列が文字列と一致するかどうかを調べるユーティリティ関数です。
                       out int startIndex, out int endIndex);

    // プロバイダー固有の ID。
    public NameId name;
    // プロバイダーをフィルタリングするためのテキストトークン (例えば、"me:"、 "p:"、"s:" など)。
    public string filterId;
    // このプロバイダーは、検索時にその filterId で明示的に指定する
    // 場合のみ、有効です。
    public bool isExplicitProvider;
    // 検索アイテムのラベルをフェッチしてフォーマットするハンドラー。
    public FetchStringHandler fetchLabel;
    // アイテムに非同期な説明を提供するハンドラー。
    // 検索でアイテムが表示される直前に呼び出されます。
    // Search が必要とするときのみ、
    // プラグインプロバイダーが長い説明をフェッチすることを可能にします。
    public FetchStringHandler fetchDescription;
    // アイテムの非同期サムネイルを提供するハンドラー。
    // アイテムが表示される直前に呼び出されます。
    //Search が必要とするときだけ
    // プラグインプロバイダーがプレビューを取得/生成できます。
    public PreviewHandler fetchThumbnail;
    // ドラッグインタラクションをサポートするハンドラー。
    //DragAndDrop マネージャーを適切に設定できるかは SearchProvider によります。 
    public StartDragHandler startDrag;
    // 選択が変更され、Search がそれを追跡できるようになったときに呼び出されます。
    public TrackSelectionHandler trackSelection;
    // 必須: 検索コンテキストのアイテムを取得するハンドラー。
    public GetItemsHandler fetchItems;
    // 検索プロバイダーは、ユーザーが検索クエリを完了するのに役立つ
    // 単語のリストを返します。
    public GetKeywordsHandler fetchKeywords;
    // SearchProvider (AssetProvider の例を参照) の 
    // FilterWindow に表示されるサブフィルターのリスト。
    public List<NameId>subCategories;
    // 検索ウィンドウが開くときに呼び出されます。プロバイダーが
    // キャッシングを実行できるようになります。
    public Action onEnable;
    // 検索ウィンドウが閉じるときに呼び出されます。
    // プロバイダーがキャッシュしたリソースを解放します。
    public Action onDisable;
    // プロバイダをソートする Int。検索結果の順序や、
    // FilterWindow に表示されるプロバイダーの順序に影響します。
    public int priority;
    // Search が "contextual mode" で開かれたときに呼び出されます。true を返す場合、
    // この検索コンテキストでそのプロバイダーが有効であることを意味します。
    public IsEnabledForContextualSearch isEnabledForContextualSearch;
}</NameId>

リソースのキャッシュと解放

Search ウィンドウを起動すると onEnable が呼び出され、リソースをキャッシュするために使用できます。

Search ウィンドウを閉じると onDisable が呼び出され、リソースを解放するために使用できます。

初期化

検索アイテムリストは仮想スクロールアルゴリズムを使用しているため、SearchItem フィールドの一部 (例えば labelthumbnaildescription) は、まだ表示されていない場合は、オンデマンドで表示されます。

アイテムが作成された後にこれらのフィールドに値を入れるには、SearchProvider を特定のハンドラー (fetchLabelfetchDescriptionfetchThumbnail ) で初期化する必要があります。

トラッキングアイテムの選択

trackSelection でコールバックを登録すると、マウスやキーボードを使って検索結果のアイテムを選択するたびに、Search に何か処理をさせることができます。例えば、AssetScene プロバイダーは trackSelection コールバックを使って Search で選択したアイテムを ping できます。

ドラッグアンドドロップの有効化

検索プロバイダーの中には、シーンにドラッグアンドドロップできるアイテムを返すものがあります。アイテムがドラッグアンドドロップをサポートするカスタムプロバイダーを作成する場合、startDrag を実装してください。

例えば、AssetScene プロバイダーは DragAndDrop 構造体に、適切なドラッグアンドドロップ操作を可能にするために関連するアイテムの UID を加えます。

コンテクスト検索にプロバイダーを加える

Alt Shift + C のショートカットで検索ウィンドウを開くと、コンテクスト検索が開始されます。つまり、フォーカスのあるウィンドウが検索されます。

コンテキスト検索を起動すると、isEnabledForContextualSearch をオーバーライドするプロバイダーは、以下の例のように、有効にすべきかどうかを確認します。

// Scene Hierarchy プロバイダーから取得。
//シーンビューまたは Hierarchy ウィンドウにフォーカスがある場合、
//プロバイダーをコンテキスト検索の一部にします。
isEnabledForContextualSearch = () =&gt;
                QuickSearchTool.IsFocusedWindowTypeName("SceneView")
                QuickSearchTool.IsFocusedWindowTypeName("SceneHierarchyWindow");
カスタムの検索プロバイダーの作成
検索プロバイダーの登録