Persatuan - Coroutines

Coroutine adalah alat yang paling berguna saat membuat game di Unity. Mari kita pertimbangkan baris kode yang ditunjukkan di bawah ini untuk memahami apa itu coroutine.

IEnumerator MyCoroutineMethod() {
   // Your code here…
   
   yield return null;
}

Umumnya, jika Anda memanggil fungsi di Unity (atau C #, sungguh), fungsi akan berjalan dari awal hingga akhir. Ini adalah apa yang Anda anggap sebagai perilaku "normal" sejauh menyangkut kode Anda. Namun, terkadang kami ingin dengan sengaja memperlambat suatu fungsi atau membuatnya menunggu lebih lama dari durasi sepersekian detik yang dijalankannya. Coroutine mampu melakukan hal itu: coroutine adalah fungsi yang mampu melakukannyawaiting dan timing prosesnya, serta menghentikannya sepenuhnya.

Mari kita pertimbangkan contoh untuk memahami cara kerja coroutine. Katakanlah kita ingin membuat persegi yang mengubah warnanya antara merah dan biru dalam interval 1 detik.

Untuk memulainya, kami membuat sprite. Selanjutnya, buat skrip baru, dan beri namaColorChanger. Dalam skrip ini, kami mendapatkan referensi keSprite Rendererdari sprite tersebut. Namun, kami akan menggunakan cara berbeda untuk mendapatkan komponen tersebut. Alih-alih menyeret dan melepas komponen ke dalam slot seperti yang telah kita lakukan selama ini, kita akan meminta kode untuk mendeteksi komponen itu sendiri.

Ini dilakukan melalui GetComponentmetode, yang mengembalikan komponen cocok pertama yang dideteksi. Karena kita hanya menggunakan satu Sprite Renderer per objek, kita dapat menggunakan metode ini untuk secara otomatis mendeteksi dan mendapatkan referensi ke renderer kita setiap saat.

Ingatlah bahwa perender bertanggung jawab untuk membuat sprite benar-benar terlihat di layar. Penyaji memilikicolorproperti yang memengaruhi warna global sprite; ini adalah nilai yang akan dimodifikasi. Membuat sebuahColor values ​​public akan membiarkan kami memilihnya melalui editor di program pemilihan warna default sistem operasi Anda.

private SpriteRenderer sr;

public Color color1;
public Color color2;

void Start () {
   sr = GetComponent<SpriteRenderer>();
   StartCoroutine(ChangeColor());
}

IEnumerator ChangeColor() {
   
   while (true) {
      
      if (sr.color == color1)
         sr.color = color2;
      
      else
         sr.color = color1;
      
      yield return new WaitForSeconds(3);
   }
}

Sekarang, kita akan menjebak fungsi coroutine kita dalam loop sementara.

Untuk membuat coroutine di C #, kita cukup membuat metode yang mengembalikan IEnumerator. Itu juga membutuhkanyield returnpernyataan. Pernyataan imbal hasil adalah khusus; itu yang sebenarnya memberitahu Unity untuk menghentikan sementara skrip dan melanjutkan ke frame berikutnya.

Ada beberapa cara yang dapat digunakan untuk menghasilkan pengembalian; salah satunya adalah membuat instance dariWaitForSecondskelas. Ini membuat coroutine menunggu beberapa detik dunia nyata sebelum melanjutkan.

Mari kita kompilasi kode kita dan kembali ke Unity. Kami hanya akan memilih warna alternatif kami, dan tekan tombol putar. Objek kita sekarang harus beralih di antara dua warna dalam interval 3 detik. Anda dapat menjadikan interval sebagai variabel publik dan menyesuaikan frekuensi perubahan warna juga.

Coroutine banyak digunakan untuk timedmetode, seperti yang baru saja kami lakukan. VariasiWaitForXmetode memiliki kegunaannya sendiri. Coroutine juga digunakan untuk menjalankan proses "di samping" yang berjalan sendiri saat game berjalan secara bersamaan. Ini berguna, misalnya, untuk memuat bagian di luar layar dari level yang besar saat pemain mulai di satu titik.