SearchProvider 클래스는 특정 유형의 아이템에 대한 검색을 실행하고 썸네일, 설명, 하위 필터를 관리합니다.
다음과 같은 기본 API를 갖추고 있습니다.
public class SearchProvider
{
public SearchProvider(string id, string displayName = null);
// Creates an Item bound to this provider.
public SearchItem CreateItem(string id, string label = null, string description = null, Texture2D thumbnail = null);
// Utility functions to check whether the search text matches a string.
public static bool MatchSearchGroups(string searchContext, string content);
public static bool MatchSearchGroups(string searchContext, string content,
out int startIndex, out int endIndex);
// The provider's unique ID.
public NameId name;
// Text token to "filter" a provider (for example, "me:", "p:", and "s:").
public string filterId;
// This provider is only active when a search explicitly specifies it with
// its filterId.
public bool isExplicitProvider;
// Handler to fetch and format the label of a search item.
public FetchStringHandler fetchLabel;
// Handler to provide an async description for an item. Called just before
// Search displays the item.
// Allows a plug-in provider to fetch long descriptions only when
// Search needs them.
public FetchStringHandler fetchDescription;
// Handler to provider an async thumbnail for an item. Called just before
// Search displays the item.
// Allows a plug-in provider to fetch/generate previews only when
// Search needs them.
public PreviewHandler fetchThumbnail;
// Handler to support drag interactions. It is up to the SearchProvider
// to properly set up the DragAndDrop manager.
public StartDragHandler startDrag;
// Called when the selection changes and Search can track it.
public TrackSelectionHandler trackSelection;
// MANDATORY: Handler to get items for a search context.
public GetItemsHandler fetchItems;
// A Search Provider can return a list of words that help the user complete
// their search query.
public GetKeywordsHandler fetchKeywords;
// List of sub-filters that are visible in the FilterWindow for a
// SearchProvider (see AssetProvider for an example).
public List<NameId> subCategories;
// Called when the Search window opens. Allows the Provider to perform
// some caching.
public Action onEnable;
// Called when the Search window closes. Allows the Provider to release
// cached resources.
public Action onDisable;
// Int to sort the Provider. Affects the order of search results and the
// order in which providers are shown in the FilterWindow.
public int priority;
// Called when Search opens in "contextual mode". If you return true
// it means the provider is enabled for this search context.
public IsEnabledForContextualSearch isEnabledForContextualSearch;
}
검색 창을 시작하면 리소스를 캐시하는 데 사용할 수 있는 onEnable
이 호출됩니다.
검색 창을 닫으면 리소스를 릴리스하는 데 사용할 수 있는 onDisable
이 호출됩니다.
검색 아이템 리스트는 가상 스크롤 알고리즘을 사용하기 때문에, 일부 SearchItem
필드(예: label
, thumbnail
, description
)가 아직 제공되지 않은 경우 요청 시 페치됩니다.
아이템이 생성된 후 해당 필드를 채우려면 SearchProvider
를 특정 핸들러(fetchLabel
, fetchDescription
, fetchThumbnail
)로 초기화해야 합니다.
trackSelection
에 콜백을 등록하면 마우스나 키보드를 사용하여 검색 결과에서 아이템을 선택할 때마다 검색을 수행하도록 할 수 있습니다. 예를 들어, 에셋과 씬 공급자는 trackSelection
콜백을 사용하여 검색에서 선택한 아이템 정보를 주고 받습니다.
일부 검색 공급자는 씬으로 끌어다 놓을 수 있는 아이템을 반환합니다. 아이템이 드래그 앤 드롭을 지원하는 커스텀 공급자를 생성하는 경우, startDrag
를 구현합니다.
예를 들어, 에셋과 씬 공급자는 올바른 드래그 앤 드롭 상호 작용을 허용하기 위해 관련 아이템 UID로 DragAndDrop
구조를 채웁니다.
Alt Shift + C 단축키로 검색 창을 열면 컨텍스트 검색을 시작합니다. 즉, 포커스가 있는 창을 검색합니다.
컨텍스트 검색을 시작할 때 isEnabledForContextualSearch
를 오버라이드하는 공급자를 다음 예제와 같이 활성화해야 하는지 확인합니다.
// Taken from Scene hierarchy provider:
// Makes the provider part of the contextual search if the Scene view or the
// Hierarchy window has focus.
isEnabledForContextualSearch = () =>
QuickSearchTool.IsFocusedWindowTypeName("SceneView") ||
QuickSearchTool.IsFocusedWindowTypeName("SceneHierarchyWindow");