PlayFabで必ず必要になる処理があります。
それが「ログインの処理」です。
プレイヤーのログイン処理については公式ドキュメントにも記載がありますが、書いてあることが難しいんですよね。
でもログインができないと先に進みません。
ですが、ここで「難しいしPlayFabを使うのをやめようかな」と感じてしまうのはもったいないです。
実はすでにサンプルとして実装されているものがあり、それを流用すれば1行でログインすることが可能になります。
ということで、具体的な方法を見ていきましょう。
PlayFabで何も考えずにログイン処理を実装する
PlayFabAuthServiceをもってくる
PlayFabのGitHubを見ると、PlayFabAuthService.csというクラスがあるのですが、これがかなり優秀です。
なんと、以下のログインのサンプルコードがすでに実装されています。
- サイレントログイン
- Email と Password でログイン
- Facebook アカウントでのログイン
- Google アカウントでのログイン
これは使わない手はないですね。
ということで、これをローカルにコピーしてきましょう。
ログイン処理の呼び出し
あとは、PlayFabAuthService のログイン処理を呼び出すだけです。
今回はサイレントログインで実装します。
PlayFabController というクラスのStartメソッドに、1行追加しましょう。
public class PlayFabController : MonoBehaviour
{
void Start()
{
PlayFabAuthService.Instance.Authenticate(Authtypes.Silent);
}
}
これでソースコードの準備は完了です。
スクリプトをアタッチ
あとは、空のオブジェクトにスクリプトをアタッチしてあげるだけで、ログインの準備は完了です。
イベントを紐付ける
ただこれだけだと、ログインしたかどうかがわかりにくいです。
ログイン成功時のイベント(OnLoginSuccess)を、PlayFabController と紐付けしてあげましょう。
public class PlayFabController : MonoBehaviour
{
void Start()
{
PlayFabAuthService.Instance.Authenticate(Authtypes.Silent);
}
void OnEnable()
{
PlayFabAuthService.OnLoginSuccess += PlayFabLogin_OnLoginSuccess;
}
private void PlayFabLogin_OnLoginSuccess(LoginResult result)
{
Debug.Log("Login Success!");
}
}
当然ですが、Authenticate メソッドよりも前で紐付けてあげる必要があります。
実行して以下のログが表示されればOKです。
今回はサイレントログインだけですが、興味があれば他のログイン方法も試してみてください。
また、余裕がある人は PlayFabAuthService.cs の中身で何が処理されているのかを見てみると、勉強になると思います。
イベントの紐付けを解除する
ここで終わりではありません。
たとえば、Unity で別のシーンに遷移して戻ってきたときなど、もう一度 Start メソッドが呼ばれるんですね。
このとき、今のままの処理だと、ログイン成功時のイベントが複数紐付いてしまうという問題が残ってしまいます。
なので、OnDisable メソッドなどを利用して、ログイン成功時の処理の紐付けをいったん解除してあげる必要があります。
public class PlayFabController : MonoBehaviour
{
void Start()
{
PlayFabAuthService.Instance.Authenticate(Authtypes.Silent);
}
void OnEnable()
{
PlayFabAuthService.OnLoginSuccess += PlayFabLogin_OnLoginSuccess;
}
private void PlayFabLogin_OnLoginSuccess(LoginResult result)
{
Debug.Log("Login Success!");
}
private void OnDisable()
{
PlayFabAuthService.OnLoginSuccess -= PlayFabLogin_OnLoginSuccess;
}
}
これをやっておかないと、ログイン後の処理が2回、3回と重複して動いてしまうので注意してください。
最後に
PlayFabAuthServiceのクラスを使用してログインする方法について解説しました。
すでに出来上がっている仕組みは最大限利用して、車輪の再発明はしないようにするのが大切です。
今の時代、難しいロジックを自分で組めることよりも、「いろんなAPIや仕組みを組み合わせて何を生み出すか」が重要になると思います。
この記事を参考にログイン処理をすぐに完成させて、時間をかけるべきところに作業を集中してくださいね。
PlayFab のことをもっと皆さんに知ってもらいたくて、合計500ページ以上にもなる書籍を5冊に分けて執筆しました。
私の知識をすべて詰め込んでいるので、ゲーム開発をさらに加速させたい方はぜひご覧ください。
public class PlayFabController : MonoBehaviour
{
void Start()
{
PlayFabAuthService.Instance.Authenticate(Authtypes.Silent);
}
}
このコードを書くと、PlayFabAuthServiceに赤波線が付いて先に進めなかったです(-_-;)
PlayFabAuthService.cs を同じプロジェクトに追加しているか、ご確認いただけますか?
追加してないとダメなのかな?と思い、その後追加したらきちんと動きました!
ご返信、ありがとうございました(^-^
PlayFabAuthService.csを作ったら、エラーが消えましたが、
public class PlayFabController : MonoBehaviour
{
void OnEnable()
{
PlayFabAuthService.OnLoginSuccess += PlayFabLogin_OnLoginSuccess;
}
private void PlayFabLogin_OnLoginSuccess(LoginResult result)
{
Debug.Log(“Login Success!”);
}
}
これだけだとダメだったので、その上の
void Start()
{
PlayFabAuthService.Instance.Authenticate(Authtypes.Silent);
}
も付け足すとログに表示されました。
コードを追加するごとに、追加前のコードも書いていただいていると分かりやすいかなと思いました(^-^
無事に実行できてよかったです。
ご指摘の通り、追加前のコードも書くよう修正しました。
追加していただいてありがとうございました!
PlayFabAuthService
を利用するためにusingを書かないといけないと思いますが、なんと書けばいいでしょうか??
PlayFabAuthService は using を書かなくても使用できます。
プロジェクト内に PlayFabAuthService.cs を含めてください。