1. _y_minami

    No comment

    _y_minami
Changes in body
Source | HTML | Preview
@@ -1,143 +1,143 @@
今回は Unity で PlayFab のタイトルデータを取得して表示してみます。
※PlayFabとは?という方は [こちら](https://qiita.com/_y_minami/items/6baa0445c2b161aeec65) をご覧ください。
## まえがき
### 1. タイトルデータとは
`タイトルデータ` とはゲームの設定データのことです。
PlayFab にはゲームの設定データを保存しておける KVS としての機能があります。
`タイトルデータ` という名前が少し分かりづらいような気もしますが、PlayFab は1つのゲームのことを `タイトル` と表現しますので、それを覚えておけば混乱しないかなと思います。
### 2. タイトルデータの注意点
PlayFab のタイトルデータは値を設定してから反映されるまで、最大で15分のタイムラグがあります。
そのため、タイトルデータは動的に更新されるようなデータの管理には適しません。
どのようなデータをタイトルデータとして保存するかは十分に検討が必要です。
ちなみに私は個人開発のゲームのマスタデータの管理に使用しています。
マスタデータになにか問題があった場合にデータの修正結果が最大15分間反映されない可能性はありますが、個人開発のゲームですし許容できると判断しました。
## タイトルデータを保存する
今回は GameManager から保存します。
左メニューのコンテンツを開くとタイトルデータが表示されます。
タイトルデータには2つの種類があります。
- タイトルデータ(Clientから読めるデータ)
- タイトル内部データ(サーバーサイドでしか読めないデータ)
データの性質を考慮して、適切な方を使用してください。
値は JSON で入力することが可能です。
値を入力したら下部のボタンでタイトルデータを保存します。
<details><summary>サンプルの GachaMaster の値のコピペはこちらからどうぞ</summary><div>
```` JSON
[
{
"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
}
]
````
</div></details>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97193/140f652c-94cd-e6e9-e335-63e537adfffb.png)
## Unity でタイトルデータを取得して表示する
### 1. 下準備(Unity から PlayFab SDK を使う準備と PlayFab へのログインの実装)
@ume67026265 さんが PlayFab のアカウントの作り方と、Unity へ SDK を導入する記事を書かれています。
不慣れな方はこちらを参考に進めるとスムーズに準備ができると思います。
- [PlayFab始めました](https://qiita.com/ume67026265/items/380e7068e9a2b60b26bc) ※アカウントの作り方
- [PlayFabでUnityを動かしてみる -その1下準備編-](https://qiita.com/ume67026265/items/c89b391e36855f45586f) ※Unity へ PlayFab SDK を導入する手順
- [PlayFabでUnityを動かしてみる -その2 APIコールを作ってみる-](https://qiita.com/ume67026265/items/b9313c696ceaa301baa8) ※ユーザーを PlayFab へログインさせるための手順
### 2. Unity でタイトルデータを取得して表示する
#### 2.1 シリアライザの用意
PlayFab と直接関係がある話ではありませんが、マスタデータなどを JSON で管理する場合、Unity標準のシリアライザ(JsonUtility)では上手く扱えないケースが多くあります。
その場合は [Utf8Json](https://github.com/neuecc/Utf8Json) などを利用しましょう。
Utf8Json を使う準備はこんな感じです。
1. [Release](https://github.com/neuecc/Utf8Json/releases) から最新の unipackage を落としてインポート
2. ProjectSettings で 以下のように設定する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97193/85c02afc-a2f9-b666-252e-77ceada1109b.png)
#### 2.2 PlayFabLogin クラスを編集
下準備で作った PlayFabLogin という Script を編集します。
PlayFab から TitleData を取得して表示するメソッドと、GachaMaster 用のクラスを PlayFabLogin クラスに追加します。
``` C#
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 を呼ぶ処理を追加
``` C#
private void OnLoginSuccess(LoginResult result)
{
Debug.Log("Congratulations, you made your first successful API call!");
GetTitleData(); // ここを追加
}
```
これを Unity で再生してみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97193/b57feea8-a5c1-e9d0-3064-a8da9c8b2739.png)
取得したタイトルデータが表示できました。
## 参考/関連
- [タイトルデータのドキュメント](https://docs.microsoft.com/ja-jp/gaming/playfab/features/config/titledata/quickstart)
-- [UnityからPlayFabのユーザーデータをCRUDする](https://qiita.com/drafts/5914b2ef89a8c83444b7)
+- [UnityからPlayFabのユーザーデータをCRUDする](https://qiita.com/_y_minami/items/5914b2ef89a8c83444b7)