Daftarkan Penyedia Pencarian
Mendaftar Pegangan Tindakan

Melakukan pencarian

Penyedia Pencarian menggunakan fungsi fetchItems untuk mencari item dan menyaring hasilnya. Fungsi fetchItems memiliki tanda tangan berikut:

// 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);

SearchProvider harus menambahkan SearchItem baru ke daftar items atau mengembalikan IEnumerable<SearchItem>.

Sitemap Jika Anda tidak menggunakan API Note: asinkron, Anda harus mengembalikan fetchItems dalam fungsi null Anda.fetchItems function.

A SearchItem adalah bangunan sederhana:

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;
}

A SearchItem hanya membutuhkan id.

Sitemap Ketika Anda menyaring sesuai dengan Tip: menggunakan fungsi statis SearchContext.searchText yang membuat pencarian parsial.SearchProvider.MatchSearchGroup which makes a partial search.

Menggunakan pencarian fuzzy

Untuk menggunakan pencarian fuzzy pada item, Anda dapat menggunakan FuzzySearch.FuzzyMatch, seperti dalam contoh berikut:

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

Semua item pencarian diurutkan terhadap item dari penyedia yang sama dengan score mereka. lower score muncul di bagian atas daftar item (ascending sorting).

API documentation

Anda dapat menggunakan API fetchItems asinkron ketika Penyedia Pencarian mengambil waktu yang lama untuk menghitung hasilnya, atau bergantung pada mesin pencari asinkron seperti WebRequests.

Untuk menggunakan API asynchronous, memiliki fungsi fetchItems mengembalikan IEnumerable<SearchItem>. IEnumerable<SearchItem> harus menjadi fungsi yang menghasilkan hasil, sehingga API dapat mengambil satu item sekaligus.

Ketika IEnumerable<SearchItem> dikembalikan, enumerator disimpan dan diserahkan selama pembaruan aplikasi. Enumerasi berlanjut selama beberapa pembaruan aplikasi sampai selesai.

Waktu iterasi dilarang untuk memastikan UI(User Interface) Memungkinkan pengguna untuk berinteraksi dengan aplikasi Anda. Unity saat ini mendukung tiga sistem UI. More info
Lihat di Glossary
tidak diblokir. Namun, karena panggilan berada di benang utama, Anda harus memastikan untuk menghasilkan sesegera mungkin jika hasilnya tidak siap.

Contoh berikut menunjukkan cara menggunakan API fetchItems asinkron:

public class AsyncSearchProvider : SearchProvider
{
    public AsyncSearchProvider(string id, string displayName = null)
        : base(id, displayName)
    {
        fetchItems = (context, items, provider) => FetchItems(context, provider);
    }

    private IEnumerable<SearchItem> 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: query Asset StoreSebuah perpustakaan yang berkembang dari aset gratis dan komersial yang diciptakan oleh Unity dan anggota komunitas. Menawarkan berbagai aset, dari tekstur, model dan animasi ke seluruh contoh proyek, tutorial dan ekstensi Editor. More info
    Lihat di Glossary
    menggunakan WebRequest.
  • ESS.cs: menciptakan proses untuk memulai indeks pencarian Sumber Entria, yang memberikan pencarian teks penuh untuk Aset di Proyek Anda.
Daftarkan Penyedia Pencarian
Mendaftar Pegangan Tindakan