僅在Unity 中協程完成後返回值
在Unity 中使用協程時,經常會遇到需要更新變數和協程完成後傳回其值。但是,函數本質上不會等待協程完成才會返回。
要解決此問題,一種方法是使用 Action 委託。操作委託是一個接受輸入值並對其執行操作的函數。在這種情況下,Action 委託可以用作回調,以在協程完成後接收更新的值。
更新的程式碼:
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); } }
在POST 方法中,我們不是直接回傳值,而是啟動協程並傳入 Action 委託作為回調。協程完成後就會執行回調,並將 success_fail 變數設定為適當的值。
雖然此解決方案避免了傳回 false 值的問題,但需要注意的是,POST 方法仍然傳回佔位符值 (-1),以避免阻止函數的執行。由 POST 方法的用戶端檢查此佔位符值並進行適當處理。
以上是如何在 Unity 協程完成後檢索值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!