Documentation

Unity Engine


User Manual

Script Reference

Unity Engine


Request

Executes a search request that will fetch search results asynchronously.
Read time 5 minutesLast updated 10 days ago

Definition

Request(SearchContext, SearchFlags)

Executes a search request that will fetch search results asynchronously.
public static ISearchList Request(SearchContext context, SearchFlags options = SearchFlags.None)

Parameters

Search context used to track asynchronous requests. You need to dispose of the context yourself.

Options defining how the query is performed.

Returns

Type

Description

ISearchListAsynchronous list of search items.

Remarks

The following example executes a query and print results over many frames using EditorApplication.update.
[MenuItem("Examples/SearchService/Request List")]public static void RequestList(){ ISearchList results = SearchService.Request("*.cs"); // It is important to note that when you request some search results, // that you need to enumerate them asynchronously using the returned search list. AsyncResultEnumerator.Fetch(results, item => Debug.Log(item));}class AsyncResultEnumerator{ private Action<SearchItem> m_OnEnumerate; private IEnumerator<SearchItem> m_Iterator; public static AsyncResultEnumerator Fetch(ISearchList results, Action<SearchItem> onEnumerate) { return new AsyncResultEnumerator(results, onEnumerate); } public AsyncResultEnumerator(ISearchList results, Action<SearchItem> onEnumerate) { m_OnEnumerate = onEnumerate; m_Iterator = results.GetEnumerator(); EditorApplication.update += EnumerateResults; } private void EnumerateResults() { if (m_Iterator == null || !m_Iterator.MoveNext()) { m_Iterator = null; EditorApplication.update -= EnumerateResults; } else if (m_Iterator.Current != null) m_OnEnumerate(m_Iterator.Current); }}
If you are running a coroutine you can yield results like the following:
public static IEnumerable<SearchItem> YieldResults(){ ISearchList results = SearchService.Request("*.cs"); foreach (var result in results) yield return result;}

Request(string, SearchFlags)

Executes a search request that will fetch search results asynchronously.
public static ISearchList Request(string searchText, SearchFlags options = SearchFlags.None)

Parameters

searchText

Search query to be executed.

Options defining how the query is performed.

Returns

Type

Description

ISearchListAsynchronous list of search items.

Remarks

The following example executes a query and print results over many frames using EditorApplication.update.
[MenuItem("Examples/SearchService/Request List")]public static void RequestList(){ ISearchList results = SearchService.Request("*.cs"); // It is important to note that when you request some search results, // that you need to enumerate them asynchronously using the returned search list. AsyncResultEnumerator.Fetch(results, item => Debug.Log(item));}class AsyncResultEnumerator{ private Action<SearchItem> m_OnEnumerate; private IEnumerator<SearchItem> m_Iterator; public static AsyncResultEnumerator Fetch(ISearchList results, Action<SearchItem> onEnumerate) { return new AsyncResultEnumerator(results, onEnumerate); } public AsyncResultEnumerator(ISearchList results, Action<SearchItem> onEnumerate) { m_OnEnumerate = onEnumerate; m_Iterator = results.GetEnumerator(); EditorApplication.update += EnumerateResults; } private void EnumerateResults() { if (m_Iterator == null || !m_Iterator.MoveNext()) { m_Iterator = null; EditorApplication.update -= EnumerateResults; } else if (m_Iterator.Current != null) m_OnEnumerate(m_Iterator.Current); }}
If you are running a coroutine you can yield results like the following:
public static IEnumerable<SearchItem> YieldResults(){ ISearchList results = SearchService.Request("*.cs"); foreach (var result in results) yield return result;}

Request(string, Action<SearchContext, IList<SearchItem>>, SearchFlags)

Executes a search request and calls back the specified function when all results are available.
public static void Request(string searchText, Action<SearchContext, IList<SearchItem>> onSearchCompleted, SearchFlags options = SearchFlags.None)

Parameters

searchText


Callback invoked when the search request is completed and all results are available.

Examples

[MenuItem("Examples/SearchService/Request All")]public static void RequestAll(){ SearchService.Request("t:texture", (SearchContext context, IList<SearchItem> items) => { Debug.Log("All Textures"); foreach (var item in items) Debug.Log(item); }, SearchFlags.Debug);}

Request(string, Action<SearchContext, IEnumerable<SearchItem>>, Action<SearchContext>, SearchFlags)

Executes a search request and callbacks for every batch of incoming results. It is possible to get duplicate items, so filter the final list if needed.
public static void Request(string searchText, Action<SearchContext, IEnumerable<SearchItem>> onIncomingItems, Action<SearchContext> onSearchCompleted, SearchFlags options = SearchFlags.None)

Parameters

searchText


Callback invoked everytime a batch of results are found and available.

onSearchCompleted

Callback invoked when the search request is completed.

Examples

[MenuItem("Examples/SearchService/Request Async")]public static void RequestAsync(){ var batchCount = 0; var totalItemCount = 0; void OnIncomingResults(SearchContext context, IEnumerable<SearchItem> items) { var batchItemCount = items.Count(); totalItemCount += batchItemCount; Debug.Log($"#{++batchCount} Incoming materials ({batchItemCount}): {string.Join("\n", items)}"); } void OnSearchCompleted(SearchContext context) { Debug.Log($"Query <b>\"{context.searchText}\"</b> completed with a total of {totalItemCount}"); } SearchService.Request("t:material", OnIncomingResults, OnSearchCompleted, SearchFlags.Debug);}

Request(SearchContext, Action<SearchContext, IList<SearchItem>>, SearchFlags)

Executes a search request and calls back the specified function when all results are available.
public static void Request(SearchContext context, Action<SearchContext, IList<SearchItem>> onSearchCompleted, SearchFlags options = SearchFlags.None)

Parameters


Callback invoked when the search request is completed and all results are available.

Examples

[MenuItem("Examples/SearchService/Request All")]public static void RequestAll(){ SearchService.Request("t:texture", (SearchContext context, IList<SearchItem> items) => { Debug.Log("All Textures"); foreach (var item in items) Debug.Log(item); }, SearchFlags.Debug);}

Request(SearchContext, Action<SearchContext, IEnumerable<SearchItem>>, Action<SearchContext>, SearchFlags)

Executes a search request and callbacks for every batch of incoming results. It is possible to get duplicate items, so filter the final list if needed.
public static void Request(SearchContext context, Action<SearchContext, IEnumerable<SearchItem>> onIncomingItems, Action<SearchContext> onSearchCompleted, SearchFlags options = SearchFlags.None)

Parameters


Callback invoked everytime a batch of results are found and available.

onSearchCompleted

Callback invoked when the search request is completed.

Examples

[MenuItem("Examples/SearchService/Request Async")]public static void RequestAsync(){ var batchCount = 0; var totalItemCount = 0; void OnIncomingResults(SearchContext context, IEnumerable<SearchItem> items) { var batchItemCount = items.Count(); totalItemCount += batchItemCount; Debug.Log($"#{++batchCount} Incoming materials ({batchItemCount}): {string.Join("\n", items)}"); } void OnSearchCompleted(SearchContext context) { Debug.Log($"Query <b>\"{context.searchText}\"</b> completed with a total of {totalItemCount}"); } SearchService.Request("t:material", OnIncomingResults, OnSearchCompleted, SearchFlags.Debug);}