Unity でのコルーチンの実行と値の取得
Unity ゲームでは、変数の値を返す必要があるというジレンマに直面しています。コルーチン (WaitForRequest) の実行が完了した後にのみ。ただし、POST メソッドの return ステートメントはコルーチンが完了する前に実行されるため、不正な戻り値が返されます。
コルーチンについて
Unity のコルーチンは中断された関数であり、時間の経過とともに一時停止され、再開されます。これらにより、メインスレッドをブロックせずに非同期操作を実行できます。コルーチン WaitForRequest は、HTTP 応答に基づいて success_fail 変数を更新する役割を果たします。
問題
この問題は、POST 内の return ステートメントの即時実行から発生します。方法。これは、コルーチンが success_fail 変数を更新する前に発生し、時期尚早で不正な戻り値が返されます。
アクションを使用した解決策
これを克服するには、次のようにします。 int 型の変数を受け入れるパラメーターのない関数であるアクション デリゲートを利用できます。アクションをパラメーターとして WaitForRequest コルーチンに渡すことで、コルーチンの完了時に呼び出されるコールバック関数を指定できます。
アクションによって提供されるコールバック関数は、success_fail の更新された値を受け取るため、次のことが可能になります。これを使用して、さらにアクションを実行するか、必要に応じて値を返します。
例コード
アクションの使用を示すコードの更新バージョンを次に示します。
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 コルーチンを開始し、アクション デリゲートをパラメーターとして渡します。コルーチンが完了するとアクションが呼び出され、更新された success_fail 変数にアクセスして利用できるようになります。
以上がUnity コルーチンの完了後に値を返すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。