LoginSignup
6
4

More than 1 year has passed since last update.

【Unity】PlayFabのリクエストをUniTaskを使って非同期処理する方法

Posted at

PlayFabのリクエストって、同じプレイヤーに対して同じタイミングで行ってしまうと駄目じゃないですか?

なのでリクエストを送ったら、そのコールバックの中でまたリクエストを送って、そしてそのコールバックでまたリクエストを送って…と、コールバックに殺されそうになったので、どうにか非同期処理にできないかなー?と調べていたのですが、出てきた結果が思うようなものではありませんでした。

なんとかできないかなー…と悩んだ結果、かなり簡単な方法で実現することが出来たので、共有したいと思います。

必要なのはUniTaskのみ。

上記のリンクからUniTaskのUnityPackageをダウンロードしてインポートするだけです。

あとはリクエストを送りたいタイミングでこういうコードを書くだけです。

using PlayFab;
using PlayFab.ClientModels;
using Cysharp.Threading.Tasks;
public class Sample
{
    public async UniTask LogInSample()
    {
        var request = new LoginWithCustomIDRequest();
        request.CustomId = System.Guid.NewGuid().ToString();

        LoginResult result = null;
        PlayFabError error = null;

        PlayFabClientAPI.LoginWithCustomID(request, x => result = x, x => error = x);
        await new WaitUntil(() => result != null || error != null);

        if (result != null)
        {
            Debug.Log("ログインに成功しました");
        }
        else if (error != null)
        {
            Debug.Log("ログインに失敗しました");
        }
    }
}

やっていることは非常に簡単で、コールバックに入ってくる引数を、予め用意したresult、error変数に代入するようにして、それをWaitUntilでどちらかがnullじゃなくなるまで待機しているだけです。

これをするだけで上から下に流すように処理が書けて、可読性も上がるし、何より簡単に実装できるのでオススメです。

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4