今回は 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
}
]
Unity でタイトルデータを取得して表示する
1. 下準備(Unity から PlayFab SDK を使う準備と PlayFab へのログインの実装)
@ume67026265 さんが PlayFab のアカウントの作り方と、Unity へ SDK を導入する記事を書かれています。
不慣れな方はこちらを参考に進めるとスムーズに準備ができると思います。
- PlayFab始めました ※アカウントの作り方
- PlayFabでUnityを動かしてみる -その1下準備編- ※Unity へ PlayFab SDK を導入する手順
- PlayFabでUnityを動かしてみる -その2 APIコールを作ってみる- ※ユーザーを PlayFab へログインさせるための手順
2. Unity でタイトルデータを取得して表示する
2.1 シリアライザの用意
PlayFab と直接関係がある話ではありませんが、マスタデータなどを JSON で管理する場合、Unity標準のシリアライザ(JsonUtility)では上手く扱えないケースが多くあります。
その場合は Utf8Json などを利用しましょう。
Utf8Json を使う準備はこんな感じです。
- Release から最新の unipackage を落としてインポート
- ProjectSettings で 以下のように設定する
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 で再生してみましょう。
取得したタイトルデータが表示できました。