(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]

UnityでのPlayFabの導入とログイン処理とユーザごとのカスタムID生成【Unity】【PlayFab】


このエントリーをはてなブックマークに追加


この記事でのバージョン
Unity 2018.4.8f1
PlayFab SDK 2.77.191029


はじめに

今回はUnityでのPlayFabの導入からログインまでの解説記事です!

また、ユーザごとにカスタムIDを生成する方法も紹介しています。


なお、PlayFabとはなんぞや?という方は以下の記事を参照の事。

ざっくり言うとサーバーサイドが関わる事を楽して実装出来るサービスです。





アカウント、タイトル作成

まずはPlayFabのアカウントを作成します。

f:id:kan_kikuchi:20191106060716j:plain


アカウントを作成するとメールが届くので、

そこからメールアドレスを認証し、さらにPlayFabを導入するゲームのタイトルを適当に作成します。

f:id:kan_kikuchi:20191106060759j:plain


なお、新しいゲームのタイトルや新しいスタジオ(社内のチームみたいなの)は

以下の場所からいつでも新規作成する事ができます。

f:id:kan_kikuchi:20191106062123j:plain


ちなみに、PlayFabの言語を変えたい時は

右上のMy profileを選択後、Languageを変更します。

f:id:kan_kikuchi:20191106061117j:plain



Unity側の設定

エディタ拡張機能(UnityPackage)をダウンロードし、プロジェクトにインストールすると、

f:id:kan_kikuchi:20191106062423j:plain


Window/PlayFab/Editor Extensionsからウィンドウが開けるようになります。

f:id:kan_kikuchi:20191114060745j:plain


このウィンドウからログインをした後、

f:id:kan_kikuchi:20191106063158j:plain
f:id:kan_kikuchi:20191106063204j:plain


Install PlayFab SDKでSDKをインストールします。

f:id:kan_kikuchi:20191106063309j:plain


SDKのインストール完了後、スタジオとタイトルを選べば準備完了です。

f:id:kan_kikuchi:20191106063525j:plain



ログイン処理

PlayFabにはクイックスタートというチュートリアル的なのがあるのですが、



それを元にユーザのログイン処理を実装してみると以下のような感じになります。

using PlayFab;
using PlayFab.ClientModels;
using UnityEngine;

/// <summary>
/// PlayFabのログイン処理を行うクラス
/// </summary>
public class PlayFabLogin : MonoBehaviour{
  
  public void Start(){
    //ログイン処理実行
    var request = new LoginWithCustomIDRequest { CustomId = "GettingStartedGuide", CreateAccount = true};
    PlayFabClientAPI.LoginWithCustomID(request, OnLoginSuccess, OnLoginFailure);
  }

  //ログイン成功
  private void OnLoginSuccess(LoginResult result){
    Debug.Log("Congratulations, you made your first successful API call!");
  }

  //ログイン失敗
  private void OnLoginFailure(PlayFabError error){
    Debug.LogWarning("Something went wrong with your first API call.  :(");
    Debug.LogError("Here's some debug information:");
    Debug.LogError(error.GenerateErrorReport());
  }
}


これを適当なオブジェクトにAddし、

シーンを再生するとログイン処理が実行され、ログが表示されます。

f:id:kan_kikuchi:20191106124051j:plain


ちなみにブラウザ上のダッシュボードを見ると、ログインした人数などを確認する事が可能です。

f:id:kan_kikuchi:20191106124356j:plain


なお、このサンプルでは、簡略化のためかCustomIdが常に"GettingStartedGuide"になっているため

だれがログインしても同じIDになってしまうという問題があります。

var request = new LoginWithCustomIDRequest { CustomId = "GettingStartedGuide", CreateAccount = true};


一応、LoginWithAndroidDeviceIDやLoginWithIOSDeviceIDのようなログインメソッドもありますが、

これらのメソッドもIDを指定する事は同じですし、

プラットフォームごとに処理を変えるのは面倒なので、

次項ではプラットフォームに関わらずユーザごとのカスタムIDを生成する実装の一例を紹介します。

ユーザごとのカスタムID生成

カスタムIDの生成で一番楽なのはSystemInfo.deviceUniqueIdentifierを使う事なのですが、

var request = new LoginWithCustomIDRequest { CustomId = SystemInfo.deviceUniqueIdentifier, CreateAccount = true};


残念ながらこの値は変わる事があるので今回は使えません。



と言う事で、一意のカスタムIDを生成する処理を追加したログイン用のプログラムを書いてみました。



これを先程と同様に適当なオブジェクトにAddし、

シーンを再生するとログイン処理が実行され、ログが表示されます。

f:id:kan_kikuchi:20191114065858j:plain


簡単に処理の流れを列挙すると以下のような感じ。

  1. 初ログイン時にIDを生成(32桁のランダムな英数字)
  2. 既にそのIDが使われている場合は新たにIDを生成(使われていないIDを見つけるまで)
  3. ログインが成功したらIDをPlayerPrefsに保存
  4. 2回目以降はPlayerPrefsに保存されたIDでログイン


この方法ならIDをユーザに教える事で機種変時の移行をOS関係なく行うなんて事も可能です。

ただし、PlayerPrefsにIDを保存しているので、

アプリを消すとIDも消えてしまう点には注意が必要です。


おわりに

今回は導入からログインまでをまとめてみましたが、これぐらいならかなり簡単に行えました!


ただし、まだ実際にプロジェクトに導入して運用したわけではないので、

間違いやもっと良い方法があるかもしれない点にはご注意ください。

(その際は教えてもらえると幸いです。)


PlayFabは本当に色々な機能があるので、今後もちょっとずつ記事にしていこうかと思います。