Di Unity, kami memiliki beberapa hal khusus untuk coroutine yang ditambahkan ke C # yang normal.
misalnya, bisa kita gunakan
yield return WaitForSeconds(5.f);
untuk memiliki coroutine, tunggu 5 detik sebelum melanjutkan.
Apa yang harus yield return false;
dan yield return true;
lakukan?
yield return true
melakukan sesuatu yang istimewa. Tapiyield return null
cukup jeda untuk sebuah frame, jadi saya menduga ituyield return false
memiliki efek yang sama persis (jugayield return 0
karena 0 false null semuanya sama di bawah tenda)if (0)
atauif (null)
, tidak seperti di C dan C ++.yield return 0
berhasil; rupanya karena alasan MLM menjelaskanyield
kunci telah ada sejak setidaknya C # 2.0. Yang dilakukan Unity hanyalah menyebutnya coroutine dan menangani iterator yang dihasilkan dan nilai yang dikembalikan darinya dengan cara yang dapat menyebabkan keterlambatan non-pemblokiran dalam pelaksanaan kode Anda.WaitForSeconds
tidak dinyatakan. Segera setelah Anda mendeklarasikan metode yang dipanggilWaitForSeconds
yang mengambil argumen float dan yang mengembalikan tipe elemen dari enumerasi yang Anda implementasikan, itu akan dikompilasi lagi. Karena itu,yield
tidak khusus untuk Persatuan. Jika ada,WaitForSeconds
metode ini khusus untuk Unity, tetapi meskipun demikian, metode ini tidak memperluas bahasa C #, tetapi merupakan metode tambahan yang ditulis menggunakan standar C #.Jawaban:
Yang
WaitForEndOfFrame
lain dan sejenisnya, hanyalah fungsi kosong yang menandaiYieldInstruction
untuk memutuskan apa yang harus dilakukan di mesin.Kasus default tampaknya
WaitForEndOfFrame
. Jadi, jika Andayield return
sesuatu yang tidak memiliki makna khusus, seperti bool, itu sama denganWaitForEndOfFrame
.Tampaknya tidak ada dokumentasi resmi tentang perilaku ini.
Memperbarui
berantakan berkomentar tentang kasus khusus lain:
yield return null
Semua Unity Coroutine termasuk
yield return null
, berjalan sebelum frame merender kecualiWaitForEndOfFrame
. Anda dapat menemukan Rutter 's jawaban mengagumkan selama di Unity Jawaban menjelaskan ini lebih lanjut (diagram bagus termasuk).sumber
null
danWaitForEndOfFrame
sama, tetapi mereka sebenarnya sedikit berbeda , seperti yang dijelaskan pada halaman manual urutan eksekusi .