Unity でのコルーチンの終了後にのみ値を返す
Unity でコルーチンを操作する場合、変数を更新する必要があることがよくあります。コルーチンが完了したらその値を返します。ただし、関数は本質的にコルーチンの終了を待ってから戻るわけではありません。
この問題を解決するには、アクション デリゲートを使用する方法があります。アクション デリゲートは、入力値を受け取り、それに対してアクションを実行する関数です。この場合、アクション デリゲートは、コルーチンの終了後に更新された値を受け取るコールバックとして使用できます。
更新されたコード:
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 メソッドでは、値を直接返す代わりに、コルーチンを開始し、アクション デリゲートをコールバックとして渡します。コルーチンが終了するとコールバックが実行され、success_fail 変数に適切な値が設定されます。
この解決策では false 値を返す問題は回避されますが、POST メソッドは依然として戻り値を返すことに注意することが重要です。関数の実行のブロックを避けるためのプレースホルダー値 (-1)。このプレースホルダー値を確認して適切に処理するかどうかは、POST メソッドのクライアント次第です。
以上がUnity コルーチンの完了後に値を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。