FC2ブログ
    07 «1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.» 09

    ハルシオンシステムの気ままBlog

    株式会社ハルシオンシステムのメンバーが送る、UnityやらJavaやらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

     

    【ハルシオンブログ】Unity+Playfabのお話。今回はプレイヤーデータの保存と読み込みについてです。 

    こんにちは。坂内です。

    お盆休みも終わり、仕事再開となりますね。

    コロナの影響もあって、今年のお盆休みは家から1歩も出ず・・・・さみしい連休となりました。

    話しは変わってUnityのお話。

    今回もUnity+Playfabのネタになります。

    今までPlayfabの紹介をしたり。
    【ハルシオンブログ】みなさんPlayfabって知ってますか?MicrosoftのBaaSなんですが、安くて使いやすいのでお勧め!

    タイトルデータを持ってきたり。
    【ハルシオンブログ】Unity+Playfabでのタイトルデータの取得方法。

    ファイル管理のデータをもってきたり。
    【ハルシオンブログ】Unity+Playfab Playfabサーバに置いた絵のファイルをアプリ起動時に持ってくるよぅ(ファイル管理の使い方一例)

    ランキングを使ってみたり。
    【ハルシオンブログ】京都に1泊遊びにいってきたよ。Playfabを使ったランキング(前編)
    【ハルシオンブログ】京都に1泊遊びにいってきたよ。Playfabを使ったランキング(後編)

    してきましたが、各ユーザのデータの保存などについては書いてきてなかったぽいので、軽く紹介。

    タイトルデータは、Playfabのサーバに置いておくマスタデータみたいな感じでした、ではユーザの情報(名前とか点数とか)はどうやってるの?って話になります。
    あ、ユーザのことは"プレイヤー"と呼んでますね。

    【プレイヤーデータの保存】

    public IEnumerator UpdateUserData() {
    bool isWait = true;
    UpdateUserDataRequest request = new UpdateUserDataRequest() {
    Data = new Dictionary {
    {"userName", 名前},
    {"playerId", プレイヤーのID},
    {"lv", レベル},
    {"exp", 経験値}
    }
    };
    PlayFabClientAPI.UpdateUserData(request, OnSuccess, OnError);

    while(isWait) {
    yield return null;
    }

    void OnSuccess(UpdateUserDataResult result) {
    Debug.Log("UpdateUserData:OnSuccess");
    isWait = false;
    }
    void OnError(PlayFabError error) {
    Debug.Log("UpdateUserData:OnError");
    Debug.Log(error.GenerateErrorReport());
    isWait = false;
    }
    }



    次に、プレイヤーデータの読み込み方法。

    【プレイヤーデータの読み込み】

    public IEnumerator GetUserData() {
    bool isWait = true;
    GetUserDataRequest request = new GetUserDataRequest();
    PlayFabClientAPI.GetUserData(request, OnSuccess, OnError);

    while(isWait) {
    yield return null;
    }

    void OnSuccess(GetUserDataResult result) {
    ユーザ名 = GetPlayfabUserDataString(result, "userName");
    プレイヤーID = GetPlayfabUserDataInt(result, "playerId");
    レベル = GetPlayfabUserDataInt(result, "lv");
    経験値 = GetPlayfabUserDataInt(result, "exp");
    isWait = false;
    }

    void OnError(PlayFabError error) {
    Debug.Log(error.GenerateErrorReport());
    isWait = false;
    }
    }

    public string GetPlayfabUserDataString(GetUserDataResult result, string key) {
    if(result.Data.ContainsKey(key)) {
    if(result.Data[key].Value != null) {
    return result.Data[key].Value;
    } else {
    return "";
    }
    } else {
    return "";
    }
    }

    public int GetPlayfabUserDataInt(GetUserDataResult result, string key) {
    if(result.Data.ContainsKey(key)) {
    return int.Parse(result.Data[key].Value);
    } else {
    return 0;
    }
    }



    こんな感じでプレイヤーデータの保存、読み込みができます。

    これでユーザ毎に点数やら経験値やら色々保存できます!


    ※一つ問題があります。
     プレイヤーデータの読み込みはいいのですが、保存の際にまとめて保存できる件数に制限があります。
     この件数とはどこのことを言っているのかというと、以下のコードの場所です
     
     

    public IEnumerator GetUserData() {
    bool isWait = true;
    GetUserDataRequest request = new GetUserDataRequest();
    PlayFabClientAPI.GetUserData(request, OnSuccess, OnError);

    while(isWait) {
    yield return null;
    }

    void OnSuccess(GetUserDataResult result) {
    ユーザ名 = GetPlayfabUserDataString(result, "userName"); // ①
    プレイヤーID = GetPlayfabUserDataInt(result, "playerId"); // ②
    レベル = GetPlayfabUserDataInt(result, "lv"); // ③
    経験値 = GetPlayfabUserDataInt(result, "exp"); // ④
    ・ // ⑤
    ・ // ⑥

    isWait = false;
    }

    void OnError(PlayFabError error) {
    Debug.Log(error.GenerateErrorReport());
    isWait = false;
    }
    }


    という感じで、一回で登録(更新)できる項目の数に制限があるようです。
    基本的な無料のプランだと10件までのようです。
    件数の確認は

    タイトルに入る>歯車マーク>タイトルの設定>画面上部のタブの「制限」>データストレージ>要求あたりのプレイヤーデータ更新
    に書いてるやつなのかな?

    ということで、ここの1回で登録できる件数に注意くださいませ。

    色々とPlayfabは使えるので使ってみてね。

    そんな感じで本日のブログを〆ます。
    あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0