Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

今回は 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
取得したタイトルデータが表示できました。

参考/関連

_y_minami
C# .NET Unity Azureが好きでその辺りのお仕事をしてます。 趣味はゲーム制作とお菓子作りと紅茶。 日本紅茶協会認定ティーアドバイザー。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away