その2:自作ゲームにプレイヤーレベル等のデータを保存する方法

前回に引き続き、データの保存する方法をみていきたいとおもいます

前回の状況では複数で構成されたデータを保存するために複数のキーを使って保存する方法もありますが、これではキー管理が煩雑になることが容易に想像できるので、できればキーを一つにして保存したいものです

今回は複数のデータを1つのキーで保存する方法を見ていきたいともいます

複数のデータで構成されたデータを保存する方法

複数のデータを保存する場合は、データをJsonして形式で文字列として保存する方法があります

Jsonとはデータのやり取りをするときのフォーマットで

{ "name" : "Jones" }

上記のような形のデータになります

基本的にJsonを扱うライブラリは様々(LitJson, JsonMapper等)があります 

UnityにはJsonUtilityというものが標準で搭載されています

今回はこちらを使用したいと思います

実装方法

JsonUtility扱うためにはJsonのデータを定義たクラスが必要となります

前回のまとめで見たデータ構成をJson化する場合は

前回のまとめ の例

  • 名前
  • レベル
  • 今のHP
  • 所持アイテム
  • 現在の装備
  • 覚えている技

これをクラス化します

[System.Serializable] // これで属性定義する必要があります
class PlayerData
{
    public string name;
    public int level;
    public int now_hp;
    public string equip;
    public string [] items;
    public int[] skills;
}

このようなクラスを定義します。

変数は基本的にはpublicで作らないとその変数はJson化されません

変数をprivateしたい場合は [serializefield] をつけることでその変数もJson化されます

[serializefield]
public string name;

このように各変数につけていきます。

これでJson化する準備は整いました。

Jsonデータを保存する

それでは実際にデータを保存していきます

以下の手順で行っていきます

  1. クラスにパラメータセット
  2. Json化する
  3. 文字列形式で保存
// クラスにパラメータセット
var playerData = new PlayerData()
{
    name   = "ああああ";
    level  = 1;
    now_hp = 100;
    equip  = "ヒノキの棒";
    items = new string [] { "金貨", "ポーション" };
    skills = new int[] { 0 };
}

// Json化
var saveData = JsonUtility.ToJson(playerData);

/*
 ここでこのような文字列になります
 {
    name : "ああああ",
    level : 1,
    now_hp : 100,
    equip : "ヒノキの棒",
    items : [
               "金貨",
               "ポーション"
            ],
    skills : [
                0
             ]
 }
*/

// 文字列形式で保存
PlayerPrefs.SetString("PlayerData", saveData);

このようにすることでデータの保存がきます

保存データのロード

実際にセーブしたデータをロードする場合は

先ほどの逆の手順で行えば読み込みすることができます

  1. 文字列でデータ取得
  2. Jsonを展開
// 文字列形式で読み込み
var saveData = PlayerPrefs.GetString("PlayerData", saveData);

// Jsonを展開 ここで展開するクラスを記載しておきます
var playerData = JsonUtility.FromJson<PlayerData>(saveData);

これで複数のデータで構成されたデータの保存と読み込みを行うことができました

まとめ

これで PlayerPrefsにいったん文字列に変換することで

複数のデータで構成されたデータを保存することが来ました。

新しくパラメータを追加したいときはクラスにパラメータだけで対応可能ですので、

複数のキーで管理するよりもはるかに運用も非常に楽になるかと思われます。


コメントを残す

メールアドレスが公開されることはありません。

ABOUT US

vuniformity誰でもない人
トレンドの行く末を見守っている
仮名を名乗るエンジニア

ゲーム開発は仕事であり趣味である
プログラムだけでなく多種多様なスキルを数多く持つ

ゲーム開発は
ソーシャルゲームを開発運用の経験アリ
ゲーム以外にも経験アリ
Webサービス保守開発等に携わる

ゲームプレイの主な戦場は
FGO
FEH
MTGA
マビノギ
ここでは主にunityroomで公開しているゲーム作り直しの軌跡を綴っていきます