Returning Value Only After Coroutine Finishes in Unity
When working with coroutines in Unity, it's common to encounter a need to update a variable and return its value once the coroutine completes. However, functions do not inherently wait for coroutines to finish before returning.
To resolve this issue, one approach is to use an Action delegate. An Action delegate is a function that takes an input value and performs an action on it. In this case, the Action delegate can be used as a callback to receive the updated value once the coroutine has finished.
Updated Code:
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); } }
In the POST method, instead of returning the value directly, we start the coroutine and pass in the Action delegate as a callback. The callback will be executed once the coroutine finishes, and it will set the success_fail variable with the appropriate value.
While this solution avoids the issue of returning a false value, it's important to note that the POST method still returns a placeholder value (-1) to avoid blocking the function's execution. It's up to the client of the POST method to check for this placeholder value and handle it appropriately.
The above is the detailed content of How to Retrieve a Value After a Unity Coroutine Completes?. For more information, please follow other related articles on the PHP Chinese website!