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中文網其他相關文章!