ホームページ > バックエンド開発 > C++ > Unity コルーチンの完了後に値を返すにはどうすればよいですか?

Unity コルーチンの完了後に値を返すにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-01 11:52:09
オリジナル
164 人が閲覧しました

How Can I Return a Value from a Unity Coroutine After It Completes?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート