Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Mengembalikan Nilai dengan Benar daripada Unity Coroutines?

Bagaimana untuk Mengembalikan Nilai dengan Benar daripada Unity Coroutines?

Barbara Streisand
Lepaskan: 2025-01-04 04:30:39
asal
375 orang telah melayarinya

How to Properly Return Values from Unity Coroutines?

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;
}
Salin selepas log masuk

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 parameter untuk menyediakan panggilan balik yang akan digunakan setelah coroutine selesai. Berikut ialah kod yang diubah suai:

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));
}
Salin selepas log masuk

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);
}
Salin selepas log masuk

Anda boleh memanggil fungsi POST daripada mana-mana skrip dan sediakan panggilan balik untuk mengendalikan keputusan:

this.POST("user1", "password", (result) => {
    print("Result: " + result);
});
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan