Unity 中的協程執行和值檢索
在Unity 遊戲中,您面臨著一個困境:您需要返回變數的值僅在協程(WaitForRequest) 完成執行後。然而,POST 方法中的 return 語句在協程完成之前執行,導致回傳值不正確。
理解協程
Unity 中的協程是掛起的函數,可以隨著時間的推移暫停和恢復。它們允許在不阻塞主執行緒的情況下執行非同步操作。協程 WaitForRequest 負責根據 HTTP 回應更新 success_fail 變數。
問題
問題是由於立即執行 POST 中的 return 語句而產生的方法。這種情況發生在協程有機會更新 success_fail 變數之前,導致過早且不正確的回傳值。
使用操作的解決方案
要克服這個問題,您可以可以利用 Action 委託,這是一個接受 int 類型變數的無參數函數。將 Action 作為參數傳遞給 WaitForRequest 協程,您可以指定協程完成時要呼叫的回呼函數。
Action 提供的回呼函數將接收 success_fail 的更新值,然後您可以使用它來執行進一步的操作或根據需要返回值。
範例程式碼
以下是程式碼的更新版本,示範了Action 的使用:
public int POST(string username, string passw) { WWWWWForm form = new WWWForm(); form.AddField("usr", username); form.AddField("pass", passw); WWW www = new WWW(url, form); StartCoroutine(WaitForRequest(www, (status) => { success_fail = status; // Perform other actions or return the value as needed })); // This line is no longer returning a value // as the success_fail variable is being modified asynchronously } 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); } }
在此程式碼中,POST 方法不再直接回傳值。相反,它啟動 WaitForRequest 協程,並將 Action 委託作為參數傳遞。協程完成後將呼叫該操作,讓您可以存取和使用更新的 success_fail 變數。
以上是Unity 協程完成後如何傳回值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!