Nilai Pulangan Hanya Selepas Coroutine Selesai dalam Perpaduan
Apabila bekerja dengan coroutine dalam Unity, adalah perkara biasa untuk menghadapi keperluan untuk mengemas kini pembolehubah dan kembalikan nilainya setelah coroutine selesai. Walau bagaimanapun, fungsi tidak semestinya menunggu coroutine selesai sebelum kembali.
Untuk menyelesaikan isu ini, satu pendekatan ialah menggunakan perwakilan Tindakan. Wakil Tindakan ialah fungsi yang mengambil nilai input dan melakukan tindakan padanya. Dalam kes ini, perwakilan Tindakan boleh digunakan sebagai panggilan balik untuk menerima nilai yang dikemas kini setelah coroutine selesai.
Kod Kemas Kini:
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); // Start the coroutine and pass in the callback StartCoroutine(WaitForRequest(www, (status) => { success_fail = status; })); // Function does not wait for coroutine to finish, so return a placeholder value return -1; } private IEnumerator WaitForRequest(WWW www, Action<int> callback) { yield return www; if (www.error == null) { if(www.text.Contains("user exists")) { callback(2); } else { callback(1); } } else { callback(0); } }
Dalam Kaedah POST, bukannya mengembalikan nilai secara langsung, kami memulakan coroutine dan menghantar perwakilan Tindakan sebagai panggilan balik. Panggilan balik akan dilaksanakan sebaik coroutine selesai dan ia akan menetapkan pembolehubah success_fail dengan nilai yang sesuai.
Walaupun penyelesaian ini mengelakkan isu mengembalikan nilai palsu, adalah penting untuk ambil perhatian bahawa kaedah POST masih kembali nilai pemegang tempat (-1) untuk mengelak daripada menyekat pelaksanaan fungsi. Terpulang kepada pelanggan kaedah POST untuk menyemak nilai pemegang tempat ini dan mengendalikannya dengan sewajarnya.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Nilai Selepas Coroutine Perpaduan Selesai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!