Memulangkan Nilai daripada Coroutines dalam Unity
Dalam pembangunan permainan menggunakan Unity, coroutine biasanya digunakan untuk melaksanakan tugas tak segerak, seperti menghantar permintaan HTTP . Walau bagaimanapun, mendapatkan semula hasil daripada coroutine selepas ia selesai boleh menjadi mencabar.
Pertimbangkan coretan kod berikut, di mana coroutine digunakan untuk melaksanakan permintaan POST dan mengemas kini pembolehubah, success_fail:
public int POST(string username, string passw) { WWWForm form = new WWWForm(); form.AddField("usr", username); form.AddField("pass", passw); WWW www = new WWW(url, form); StartCoroutine(WaitForRequest(www)); //problem is here ! return success_fail; }
Masalahnya di sini ialah pernyataan pemulangan dilaksanakan sebelum coroutine selesai, mengakibatkan nilai yang salah dikembalikan. Untuk menangani perkara ini, kita boleh menggunakan pendekatan berikut:
Menggunakan Tindakan
Daripada mengembalikan nilai terus daripada fungsi, kita boleh menggunakan Tindakan
public void POST(string username, string passw, Action<int> callback) { WWWForm form = new WWWForm(); form.AddField("usr", username); form.AddField("pass", passw); WWW www = new WWW(url, form); StartCoroutine(WaitForRequest(www, callback)); }
Dalam coroutine, kami menetapkan pembolehubah success_fail dan memanggil panggilan balik dengan nilainya:
private IEnumerator WaitForRequest(WWW www, Action<int> callback) { yield return www; if (www.error == null) { if(www.text.Contains("user exists")) { success_fail = 2; } else { success_fail=1; } } else { success_fail=0; } callback(success_fail); }
Anda boleh memanggil fungsi POST daripada mana-mana skrip dan sediakan panggilan balik untuk mengendalikan keputusan:
this.POST("user1", "password", (result) => { print("Result: " + result); });
Pendekatan ini membolehkan anda mendapatkan semula nilai daripada coroutine sebaik sahaja telah selesai, walaupun fungsi telah kembali.
Atas ialah kandungan terperinci Bagaimana untuk Mengembalikan Nilai dengan Benar daripada Unity Coroutines?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!