Cari ekspresi memungkinkan Anda untuk menambahkan ke bahasa query pencarian untuk mengekspresikan pertanyaan kompleks yang referensi beberapa penyedia, misalnya, untuk mencari semua objek dalam sceneAdegan berisi lingkungan dan menu permainan Anda. Pikirkan setiap file Adegan unik sebagai tingkat yang unik. Di setiap Adegan, Anda menempatkan lingkungan, hambatan, dan dekorasi, pada dasarnya merancang dan membangun permainan Anda dalam potongan-potongan. More info
Lihat di Glossary yang menggunakan shaderProgram yang berjalan di GPU. More info
Lihat di Glossary yang tidak dikompilasi.
Cari ekspresi dapat dichain bersama untuk mengubah atau melakukan manipulasi set pada Item Pencarian.
Masukkan ekspresi pencarian di jendela Search untuk mengembalikan hasilnya:
Sebuah ekspresi pencarian dimulai dengan ekspresi akar yang dapat mengandung ekspresi dalam.
Kuis sederhana seperti t:shader
adalah ekspresi. Ini mengembalikan semua item pencarian yang sesuai dengan naungan dalam proyek Anda.
Gunakan bahasa ekspresi pencarian untuk menggabungkan beberapa pertanyaan menjadi ekspresi tunggal untuk membuat pencarian yang lebih fleksibel.
Pengungkapan pencarian mendukung berikut: - query: t:shader
- query dengan ekspresi bersarang: t:prefab ref={t:texture}
- fungsi: count{t:shader}
- literal: 3
atau "this is a string literal"
- selektif properti: @path or @mesh
(pengidentifikasi kedelai dimulai dengan @
diasumsikan menjadi pemilih yang mengekstrak nilai dari Item Pencarian. Selectors dapat menemukan properti dari objek atau digunakan untuk menghitung hasil secara dinamis)
Semua ekspresi pencarian mengembalikan satu set Item Pencarian (IEnumerable<SearchItem>
). Sebagai pedoman umum, bahasa ekspresi pencarian menggunakan kurly braces {}
untuk menunjukkan satu set item. Bahkan ekspresi literal seperti 3
dievaluasi secara internal sebagai set: {3}
.
Cari ekspresi dapat dichain bersama-sama untuk membuat pertanyaan yang lebih kompleks:
t:prefab ref={t:texture}
t:texture
dari query menemukan semua tekstur dalam proyek Andat:prefab ref=
dari query menjalankan query untuk setiap tekstur yang dikembalikan dalam t: set tekstur untuk melihat bahwa prefabsJenis aset yang memungkinkan Anda untuk menyimpan GameObject lengkap dengan komponen dan properti. Prefab bertindak sebagai template dari mana Anda dapat membuat instance objek baru di tempat kejadian. More info t:prefab ref={t:texture size>4000}
: menemukan semua prefab dalam proyek dengan ukuran tekstur lebih besar dari 4000 byte.
Ini adalah setara dengan:
Menjalankan t:texture size>4000
to kembali daftar semua tekstur 4K dalam proyek (misalnya, armor.png
, treasure.png
).
Menjalankan t:prefab ref=<one of the 4K textures>
(misalnya, t:prefab ref=armor.png
dan kemudian t:prefab ref=treasure.png
).
Menjelajahi semua hasil dan mengembalikan ini sebagai satu daftar Item Pencarian.
t:[shader, material, texture]
: menemukan semua objek yang jenisnya adalah shader
, material
, atau texture
. Menggunakan query normal itu bisa diungkapkan sebagai:
t:shader or t:material or t:texture
Unity memiliki perpustakaan fungsi ekspresi pencarian untuk memanipulasi dan mengubah set Item Pencarian. Setiap fungsi ini dapat mengambil beberapa argumen dan mengembalikan satu set item. Unity Search Expressions menggunakan kurly braces untuk menghapus panggilan fungsi.
Daftar lengkap semua fungsi adalah here.
Contoh: Fungsi count menghitung item dari setiap set dilewatkan sebagai parameter dan mengembalikan jumlah.
count{t:shader}
: kembali satu set yang mengandung jumlah naungan dalam proyek. Contoh: {34}
.count{t:shader, t:texture}
: kembali satu set yang mengandung jumlah naungan dan tekstur dalam proyek. Contoh: {34, 2048}
.Fungsi dapat dirantai bersama, mirip dengan s-expression digunakan dalam bahasa pemrograman LISP.
Sitemap Hanya ada ekspresi akar tunggal.Note: There can only be a single root expression.
Contoh rantai fungsi yang dievaluasi, untuk operasi:
print{"path=@path", first{10, sort{t:texture, @size}}}
: print jalur 10 tekstur terbesar dalam proyek
t:texture
: menemukan semua tekstur dalam proyek dan kemudian memilih ukuran properti.sort{ t:texture, @size}
: menyortir semua tekstur ini sesuai dengan properti ukuran mereka.first{10
: pilih tekstur 10 berurutan pertama.print{ "path=@path"
: mencetak daftar ini di konsol sesuai dengan string format di mana Unity Search mengekstrak properti jalan dari setiap item yang dihasilkan path=@path
.Fungsi dapat memiliki beberapa tanda tangan (nama metode dan jenis dan jenis (nilai, referensi, atau output) dari masing-masing parameter formal, mirip dengan C #) dan dapat mendukung optional (parameter yang tidak perlu dilewatkan ke fungsi) dan variadic (parameter yang dapat mengambil sejumlah variabel argumen) parameter.
Literal adalah kata-kata atau angka yang ingin Anda cari atau jumlah jumlah yang ingin Anda ambil, bertentangan dengan string kueri. Misalnya, t: pencarian teks untuk Aset dengan tekstur dalam nama tipe (misalnya, Tekstur2D), tetapi menambahkan tanda kutip untuk membuatnya literal, "t: tekstur" mencari Aset bernama t: tekstur.
Expression | Description |
---|---|
Number | Nomor literal (1,2,3, and so on ) |
Set | Braket persegi ([ ] ) |
String | Kutipan tunggal atau ganda ('' atau "" ) |
Jumlah literal dapat digunakan sebagai parameter untuk fungsi (seperti first
).
first{10, t:shader}
-> {the first 10 shaders return by the 't:shader' query}
Express set nilai menggunakan braket persegi []
. Satu set dapat berisi jenis ekspresi, tetapi parser ekspresi pencarian akan mengasumsikan unsur-unsur set adalah literal bukan pertanyaan pencarian.
Contoh:
[t:shader, hello, 3]
-> ["t:shader", "hello", 3]
Jika menggunakan kurungan keriting ({}
), parser akan memperlakukan ini sebagai tiga pertanyaan:
{t:shader, hello, 3}
-> {<run query untuk t:shader>, <run query untuk halo>, <run query untuk 3>}
String literal dapat digunakan sebagai parameter untuk beberapa fungsi (seperti format
). Anda dapat menentukan literal string menggunakan kutipan tunggal atau ganda:
“hello” atau ‘hello Sitemap
Fungsi format mengambil string format sebagai parameter:
format{t:texture, '@path (@size)'}
Selektif adalah pengidentifikasi yang didebukan menggunakan prefiks @
. Gunakan pemilih untuk mengakses properti item untuk menghitung, menyaring, atau format. Selectors dapat memetakan properti UnityEngine. Objek atau ke fungsi kustom untuk memungkinkan akses ke data dinamis.
Pemilihan dasar yang mendukung Item Pencarian adalah:
id
: ID unik dari item ini sesuai dengan Penyedia Pencarian.value
: Nilai internal item. Secara default itu adalah IDnya, tetapi fungsi dapat menimpa nilai item.label
: label item seperti yang ditunjukkan di jendela Search windowdesc
atau description
: deskripsi item (garis kedua dari jendela Search)Unity juga mendefinisikan pemilih generik untuk Item Pencarian, misalnya:
@name
: WordPress.org@size
: Ukuran file pada disk untuk aset@path
: Sitemap@extension
: Ekstensi file aset@provider
: Penyedia Pencarian yang telah menghasilkan item iniUntuk mengakses sifat spesifik dari Item Pencarian untuk melakukan operasi, gunakan pemilih:
count{t={distinct{select{a:assets, @type}}}}
a:assets, @type
menemukan semua nama objek assets
dan kemudian memilih properti type
untuk benda-benda tersebut.distinct
mengembalikan daftar semua jenis yang ada.t={list of types}
kembali beberapa daftar masing-masing aset.count
menghitung berapa banyak aset masing-masing jenis dalam proyek Anda.avg{@size,t:shader}
t:shader, @size
: menemukan semua naungan dan kemudian memilih ukuran properti.avg
: menghitung ukuran rata-rata untuk semua naungan dalam proyek Anda.print{@value, count{t:texture, t:material}}
pemilih @#
menemukan sifat serial dan sifat material:
sort{t:texture, @#height}
: menyortir semua tekstur untuk sifat mereka yang di serialisasi tinggi.Anda dapat menamai ekspresi pencarian untuk membuatnya lebih mudah ditampilkan di jendela Search.
Sebagai contoh, masukkan ekspresi sort{count{t:audio, t:texture}, @value,desc}
di jendela Search, mungkin sulit dibaca yang dihitung sesuai dengan jenis mana:
Menggunakan alias: sort{count{t:audio as Audio, t:texture as Texture}, desc}
menghasilkan hasil yang lebih mudah dibaca:
Untuk secara dinamis menghasilkan nama alias, gunakan fungsi alias
. Contoh:
alias{[1, 2, 3], 'Title value'}
akan menghasilkan item dengan label ini:
{Title 1, Title 2, Title 3}
Operator memperluas ...
memungkinkan satu set item untuk dikelompokkan ke beberapa set item bukan hanya satu set.
...{expandable expression}
-> {sub expr 1} {sub expr 2} {sub expr N}
Contoh:
Proyek kecil memiliki 3 prefab, 4 tekstur dan 5 naungan. Ekspresi berikut menyediakan hitungan untuk semua:
count{t:[prefab, texture, shader]}
-> {12}
Hasil dari ekspresi pencarian t:[prefab, texture, shader]
adalah daftar terpadu 12 item dari jenis prefab, tekstur, dan naungan. Ini juga bisa diungkapkan sebagai: t:prefab or t:texture or t:shader
.
Gunakan operator ekspansi untuk menghitung jumlah setiap jenis aset secara terpisah:
count{...t:[prefab, texture, shader]}
-> Login count{t:prefab, t:texture, t:shader}
-> {3, 4, 5}
Fungsi groupBy
dapat digunakan dengan operator ekspansi untuk mengembalikan set item yang dikelompokkan oleh kunci umum.
Contoh:
Proyek ini memiliki tiga jenis aset (prefabs, tekstur, dan naungan). Untuk selector @type
yang mengembalikan jenis Cari Barang, ekspresi akan berkembang menjadi:
count{t:prefab or t:texture or t:shader}
Anda dapat menggunakan fungsi groupBy
ke item kelompok dengan jenis mereka dan kemudian menghitung setiap jumlah item per jenis:
count{...groupBy{t:prefab or t:texture or t:shader, @type}}
Contoh ini menunjukkan bagaimana ekspresi pencarian dapat digunakan untuk permintaan yang kompleks dalam proyek.
Menghitung penggunaan prefab dalam adegan dan memilah penggunaan tertinggi:
sort{select{p: t:prefab *.prefab, @path, count{t:scene ref:@path} as count}, @count, desc}
Urutkan dan menghitung semua jenis aset
sort{count{...groupby{a:assets, @type}}, @value, desc}
Menemukan meshGrafik utama primitif Unity. Mesh membuat sebagian besar dunia 3D Anda. Unity mendukung mesh poligon triangulat atau Quadrangulasi. Nurbs, Nurms, permukaan Subdiv harus dikonversi ke poligon. More info
Lihat di Glossary dengan yang paling simpul (mengasumsikan @vertices selector tersedia dalam proyek).
first{sort{t:mesh, @vertices, desc}}
Urutkan semua jala dengan jumlah vertex mereka
sort{select{h: t:mesh, @path, @vertices}, @vertices, desc}
Menghitung jumlah vertik untuk semua jala
sum{select{h:t:mesh, @vertices}}
Temukan semua aset yang merujuk pada mesh
ref=select{p:t:mesh, @path}
Daftar referensi adegan prefab
select{p: *.prefab, @path, count{p: a:sceneIndex ref="@path"} as count}
Evaluasi ekspresi pencarian didasarkan pada pola C # iterator dan penggunaan kata kunci yield. Ini memastikan bahwa evaluasi terpapar sebagai operasi asinkron penuh dan mungkin tidak terblokir. Hal ini memungkinkan setiap ekspresi pencarian untuk memulai komputasi sebelum set awal item pencarian sepenuhnya dihitung.
Secara default semua evaluasi ekspresi pencarian dilakukan dalam benang pekerja untuk tidak memblokir Editor. Untuk operasi yang perlu bergantung pada API Unity yang tidak aman (seperti beberapa aksesor pemilih), kami memiliki API utilitas untuk memanjang operasi tersebut pada benang utama dan menjaga pola item pencarian yielding.
Bahasa ungkapan pencarian telah dirancang untuk dapat disesuaikan. API untuk menyesuaikan semua bagian kerangka akan tersedia dalam rilis masa depan.