(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]



Unity+PlayFabでタイトルデータ(各ゲームごとのデータ)を設定&取得【Unity】【PlayFab】


このエントリーをはてなブックマークに追加



この記事でのバージョン
Unity 2018.4.8f1
PlayFab SDK 2.77.191029


はじめに

今回はUnityでPlayFabのタイトルデータを使ってみようという感じの記事です!


ちなみに、PlayFabとはなんぞや?という方は以下の記事を参照の事。

ざっくり言うとサーバーサイドが関わる事を楽して実装出来るサービスです。



しかも、無料で始める事も可能ですし、有料プランでも1000MAUまでは無料

「ユーザが全然増えないのにお金だけ払う」みたいな事がありません。

なので個人開発でも使い始めやすいですし、Microsoftのサービスという安心感まであります。



なお、本記事は以下の導入やログイン処理が済んでいる前提になりますので、あしからず。





タイトルデータとは

そもそもPlayFabにおけるタイトルとは、ゲームタイトルの事なので、

タイトルデータは各ゲームごとのデータという意味になります。

例えば「敵の能力値」や「ステージの累計数」のようにどのユーザでも同じ値の物に使います。


ちなみに、上記の通りタイトルデータは誰でも共通の値なので、

ゲーム側から値を送信して変更するという使い方はしません。


そういうゲーム側から値を送信して変更する「ユーザの名前」や「クリアしたステージ」のような

各ユーザで異なる物はユーザデータと言い、これもPlayFabで扱えるので、いずれ記事にする予定です。

記事にしました!



さらにランキングやゲーム内通貨を扱う機能等もあるようなので、これもいずれ記事にする予定です。

記事にしました!





タイトルデータの設定

タイトルデータの設定はブラウザ上で行います。

なお、Window/PlayFab/Editor Extensionsで開けるウィンドウの右上にある

GAME MANAGERをクリックすると、設定用のページを開けます。

f:id:kan_kikuchi:20200105044438j:plain
f:id:kan_kikuchi:20200105044447j:plain


設定箇所は左側にある「参加/コンテンツ」のページ内上部にある「タイトルデータ」です。

キーと値を入力し、「タイトルデータを保存」を押すだけで設定完了。

f:id:kan_kikuchi:20200105045220j:plain


また、Jsonでの設定も可能です。

f:id:kan_kikuchi:20200105045231j:plain


ちなみに同ページにあるタイトル内部データはサーバー上でのみ使われるデータで、今回は使いません。

f:id:kan_kikuchi:20200105045250j:plain



タイトルデータの取得

次に設定したタイトルデータの取得方法ですが、

まず、以前の記事で紹介したような感じでログイン処理を先に行います。



そしてその後は、GetTitleDataRequestのインスタンスを生成し、

PlayFabClientAPI.GetTitleDataにそれプラス、成功時と失敗時のデリゲートを渡すだけ。

using PlayFab;
using PlayFab.ClientModels;
using UnityEngine;
using UnityEngine.UI;

/// <summary>
/// タイトルデータを取得するサンプル
/// </summary>
public class TitleDataSample : MonoBehaviour {

  [SerializeField]
  private Text _text = default;

  //=================================================================================
  //取得
  //=================================================================================

  /// <summary>
  /// タイトルデータの取得
  /// </summary>
  public void GetTitleData() {
    //GetTitleDataRequestのインスタンスを生成
    var request = new GetTitleDataRequest();

    //タイトルデータ取得開始
    Debug.Log($"タイトルデータの取得開始");
    PlayFabClientAPI.GetTitleData(request, OnSuccess, OnError);
  }
  
  //=================================================================================
  //取得結果
  //=================================================================================

  //タイトルデータの取得に成功
  private void OnSuccess(GetTitleDataResult result) {
    Debug.Log($"タイトルデータの取得に成功しました");

    //result.Data(Dictionary)に全タイトルデータが入っていて、Keyを文字列で指定すると値が取り出せる
    _text.text = $"Test1 : {result.Data["Test1"]}\nTest2 : {result.Data["Test2"]}";
  }

  //タイトルデータの取得に失敗
  private void OnError(PlayFabError error) {
    Debug.LogWarning($"タイトルデータの取得に失敗しました : {error.GenerateErrorReport()}");
  }
  
}


実際に使ってみると以下のような感じで、

ブラウザ上で値を変えると、Unity上でも取得出来る値が変わっているのが分かると思います。

f:id:kan_kikuchi:20200105054201g:plain


ただし、上記の例では変更後に即時反映されていますが、

反映されるまでに最大15分かかる可能性がある点には注意が必要です。


おわりに

今回の記事のために初めてPlayFabでタイトルデータを使ってみましたが、

びっくりするほど簡単に設定や取得の実装が行えました。


タイトルデータだけでも用途は多岐に渡るので、これだけでPlayFabを使う理由になり得ると思います。

なお、前述したように他にも様々な機能があるので、これからも試して記事にしていきたいと思います。


参考