LoginSignup
22
10

More than 3 years have passed since last update.

UnityでPlayFabのタイトルデータを取得して表示する

Last updated at Posted at 2019-06-21

今回は Unity で PlayFab のタイトルデータを取得して表示してみます。
※PlayFabとは?という方は こちら をご覧ください。

まえがき

1. タイトルデータとは

タイトルデータ とはゲームの設定データのことです。
PlayFab にはゲームの設定データを保存しておける KVS としての機能があります。

タイトルデータ という名前が少し分かりづらいような気もしますが、PlayFab は1つのゲームのことを タイトル と表現しますので、それを覚えておけば混乱しないかなと思います。

2. タイトルデータの注意点

PlayFab のタイトルデータは値を設定してから反映されるまで、最大で15分のタイムラグがあります。
そのため、タイトルデータは動的に更新されるようなデータの管理には適しません。
どのようなデータをタイトルデータとして保存するかは十分に検討が必要です。

ちなみに私は個人開発のゲームのマスタデータの管理に使用しています。
マスタデータになにか問題があった場合にデータの修正結果が最大15分間反映されない可能性はありますが、個人開発のゲームですし許容できると判断しました。

タイトルデータを保存する

今回は GameManager から保存します。
左メニューのコンテンツを開くとタイトルデータが表示されます。

タイトルデータには2つの種類があります。
- タイトルデータ(Clientから読めるデータ)
- タイトル内部データ(サーバーサイドでしか読めないデータ)
データの性質を考慮して、適切な方を使用してください。

値は JSON で入力することが可能です。
値を入力したら下部のボタンでタイトルデータを保存します。

サンプルの GachaMaster の値のコピペはこちらからどうぞ
[
  {
    "ID": 1,
    "Name": "レアキャラ1",
    "Rank": 2,
    "Rate": 16
  },
  {
    "ID": 2,
    "Name": "レアキャラ2",
    "Rank": 2,
    "Rate": 16
  },
  {
    "ID": 3,
    "Name": "レアキャラ3",
    "Rank": 2,
    "Rate": 16
  },
  {
    "ID": 4,
    "Name": "レアキャラ4",
    "Rank": 2,
    "Rate": 16
  }
]

image.png

Unity でタイトルデータを取得して表示する

1. 下準備(Unity から PlayFab SDK を使う準備と PlayFab へのログインの実装)

@ume67026265 さんが PlayFab のアカウントの作り方と、Unity へ SDK を導入する記事を書かれています。
不慣れな方はこちらを参考に進めるとスムーズに準備ができると思います。

2. Unity でタイトルデータを取得して表示する

2.1 シリアライザの用意

PlayFab と直接関係がある話ではありませんが、マスタデータなどを JSON で管理する場合、Unity標準のシリアライザ(JsonUtility)では上手く扱えないケースが多くあります。

その場合は Utf8Json などを利用しましょう。

Utf8Json を使う準備はこんな感じです。
1. Release から最新の unipackage を落としてインポート
2. ProjectSettings で 以下のように設定する
image.png

2.2 PlayFabLogin クラスを編集

下準備で作った PlayFabLogin という Script を編集します。
PlayFab から TitleData を取得して表示するメソッドと、GachaMaster 用のクラスを PlayFabLogin クラスに追加します。

    public static void GetTitleData()
    {
        var request = new GetTitleDataRequest();
        PlayFabClientAPI.GetTitleData(request, OnSuccess, OnError);

        void OnSuccess(GetTitleDataResult result)
        {
            Debug.Log("GetTitleData: Success!");

            var loginMessage = result.Data["LoginMessage"];
            Debug.Log(loginMessage);

            var gachaMaster = Utf8Json.JsonSerializer.Deserialize<GachaMaster[]>(result.Data["GachaMaster"]);
            foreach (var master in gachaMaster)
            {
                Debug.Log(master.Name);
            }
        }

        void OnError(PlayFabError error)
        {
            Debug.Log("GetTitleData: Fail...");
            Debug.Log(error.GenerateErrorReport());
        }
    }

    public class GachaMaster
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public int Rank { get; set; }
        public int Rate { get; set; }
    }

2.3 OnLoginSuccess メソッドの中で GetTitleData を呼ぶ処理を追加

    private void OnLoginSuccess(LoginResult result)
    {
        Debug.Log("Congratulations, you made your first successful API call!");

        GetTitleData(); // ここを追加
    }

これを Unity で再生してみましょう。
image.png
取得したタイトルデータが表示できました。

参考/関連

22
10
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
22
10