Класс 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 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
(для например, метка
, миниатюра
и description
) извлекаются по запросу, если они еще не предоставлены.
Чтобы заполнить эти поля после создания элементов, необходимо инициализировать SearchProvider
. с определенными обработчиками (fetchLabel
, fetchDescription
, fetchThumbnail
).
Отслеживание выбора элемента
Вы можете зарегистрировать обратный вызов на trackSelection
, чтобы Поиск делает что-то всякий раз, когда вы выбираете элемент в результатах поиска с помощью мыши или клавиатуры. Например, АктивЛюбой носитель или данные, которые можно использовать в вашей игре или проекте. Ресурс может быть получен из файла, созданного вне Unity, например, из 3D-модели, аудиофайла или изображения. Вы также можете создавать некоторые типы ресурсов в Unity, например контроллер аниматора, аудиомикшер или текстуру рендеринга. Подробнее
См. в Словарь и СценаСцена содержит окружение и меню вашей игры. Думайте о каждом уникальном файле сцены как об уникальном уровне. В каждой сцене вы размещаете свое окружение, препятствия и декорации, по сути проектируя и создавая свою игру по частям. Подробнее
См. Словарь. Поставщики используют обратный вызов trackSelection
для проверки связи с выбранным элементом в Поиске.
Включение перетаскивания
Некоторые службы поиска возвращают элементы, которые можно перетаскивать в сцену. Если вы создаете собственный поставщик, элементы которого поддерживают перетаскивание, реализуйте startDrag
.
Например, поставщики Asset и Scene заполняют DragAndDrop.
с соответствующими UID элементов, чтобы обеспечить правильное взаимодействие перетаскивания.
Включение поставщика в контекстный поиск
Когда вы открываете окно поиска с помощью сочетания клавиш 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");