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じゃなくなるまで待機しているだけです。
これをするだけで上から下に流すように処理が書けて、可読性も上がるし、何より簡単に実装できるのでオススメです。