首頁 > 後端開發 > C++ > 如何正確從 Unity 協程傳回值?

如何正確從 Unity 協程傳回值?

Barbara Streisand
發布: 2025-01-04 04:30:39
原創
402 人瀏覽過

How to Properly Return Values from Unity Coroutines?

Unity 中協程的回傳值

在使用Unity 進行遊戲開發時,協程通常用於執行非同步任務,例如發送HTTP 請求。然而,在協程完成後檢索結果可能具有挑戰性。

考慮以下程式碼片段,其中協程用於執行POST 請求並更新變數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;
}
登入後複製

這裡的問題是return 語句在協程完成之前執行,導致傳回錯誤的值。為了解決這個問題,我們可以使用以下方法:

使用操作

我們可以使用 Action 來取代直接從函數傳回值。參數來提供回調,協程完成後將呼叫該回調。以下是修改後的程式碼:

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));
}
登入後複製

在協程中,我們設定 success_fail 變數並使用其值呼叫回調:

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);
}
登入後複製

您可以從任何腳本呼叫 POST函數並提供回調來處理結果:

this.POST("user1", "password", (result) => {
    print("Result: " + result);
});
登入後複製

此方法允許您在協程獲得值後從協程中檢索值完成,即使函數已經返回。

以上是如何正確從 Unity 協程傳回值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板