Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

Провайдеры поиска используют функцию fetchItems для поиска элементов и фильтрации результатов. Функция fetchItems имеет следующую подпись:

// context: the necessary search context (for example, tokenized search and // sub-filters). // items: list of items to populate (if not using the asynchronous api) // provider: the Search Provider itself public delegate IEnumerable<SearchItem> GetItemsHandler(SearchContext context, List<SearchItem> items, SearchProvider provider);

The SearchProvider must add new SearchItems to the items list or return an IEnumerable.

Примечание. Если вы не используете асинхронный API fetchItems, вы должны вернуть null в вашей функции fetchItems.

SearchItem – это простая структура:

public struct SearchItem { public readonly string id; // The item score affects how Search sorts the item within the results from the Search Provider. public int score; // Optional: Display name of the item. If the item does not have one, // SearchProvider.fetchLabel is called). public string label; // If the item does not have a description SearchProvider.fetchDescription // is called when Search first displays the item. public string description; // If true, the description already has rich text formatting. public SearchItemDescriptionFormat descriptionFormat; // If the item does not have a thumbnail, SearchProvider.fetchThumbnail // is called when Search first displays the item. public Texture2D thumbnail; // Search Provider user-customizable content public object data; }

Для SearchItem требуется только id.

Совет. При фильтрации по SearchContext.searchText используйте статическую функцию SearchProvider.MatchSearchGroup, которая выполняет частичный поиск.

Использование нечеткого поиска

Чтобы использовать нечеткий поиск для элемента, вы можете использовать FuzzySearch.FuzzyMatch, как в следующем примере:

if (FuzzySearch.FuzzyMatch(sq, CleanString(item.label), ref score, matches)) item.label = RichTextFormatter.FormatSuggestionTitle(item.label, matches);

Все элементы поиска сортируются по элементам одного и того же поставщика с их оценкой. Меньшая оценка отображается вверху списка элементов (сортировка по возрастанию).

API асинхронного поиска

Вы можете использовать асинхронный API fetchItems, когда поисковому провайдеру требуется много времени для вычисления результатов или он полагается на асинхронную поисковую систему, такую ​​как WebRequests.

Чтобы использовать асинхронный API, функция fetchItems возвращает IEnumerable. IEnumerable должен быть функцией, которая выдает результаты, чтобы API мог получать по одному элементу за раз.

Когда возвращается IEnumerable, перечислитель сохраняется и повторяется во время обновления приложения. Перечисление продолжается в течение нескольких обновлений приложения, пока оно не будет завершено.

Время итерации ограничено, чтобы гарантировать, что UI(пользовательский интерфейс) позволяет пользователю взаимодействовать с вашим приложением. В настоящее время Unity поддерживает три системы пользовательского интерфейса. Подробнее
См. в Словарь
не заблокирован. Однако, поскольку вызов находится в основном потоке, вы должны как можно скорее выполнить его, если результаты еще не готовы.

В следующем примере показано, как использовать асинхронный API fetchItems:

public class AsyncSearchProvider : SearchProvider { public AsyncSearchProvider(string id, string displayName = null) : base(id, displayName) { fetchItems = (context, items, provider) => FetchItems(context, provider); } private IEnumerable FetchItems(SearchContext context, SearchProvider provider) { while(ResultsNotReady()) { yield return null; } var oneItem = // Get an item yield return oneItem; var anotherItem = // Get another item yield return anotherItem; if(SomeConditionThatBreaksTheSearch()) { // Search must be terminated yield break; } // You can iterate over an enumerable. The enumeration // continues where it left. foreach(var item in someItems) { yield return item; } } }
  • AssetStoreProvider.cs: запрашивает Asset Storeрастущую библиотеку бесплатные и коммерческие активы, созданные Unity и членами сообщества. Предлагает широкий спектр ресурсов, от текстур, моделей и анимации до целых примеров проектов, руководств и расширений редактора. Подробнее
    См. в Словарь
    с помощью WebRequest.
  • ESS.cs: создает процесс для запуска индексатора поиска Entrian Source, который обеспечивает полнотекстовый поиск активов в вашем проекте.
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3