Edited at

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

今回は 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

取得したタイトルデータが表示できました。


参考/関連