Easy Save2 で シリアライズされたクラスを保存する

前回、Easy Save2 を使ってみる でEasy Save2 を簡単に使ってみた。
クラス内の保存するパラメータが少ないうちは、1つずつセーブしたりロードしたりしてもいいのだが、これが大量になるといちいち記述するのも面倒になる。
Saving and Loading Custom Scriptsを見てもらうとわかるのだが、SaveとLoadで該当するパラメータを全部記載しないといけないので、なかなか骨が折れる。
できることなら、クラス内のパラメータをまとめて保存したい。というわけで、今回はクラスをシリアライズして保存してみる。

以下のようなクラスをサンプルとする。

1
2
3
4
5
6
public class Player {

public int hp;
public string name;

}

BinaryFormatterでバイナリにシリアライズして保存する

BinaryFormatterはクラスをバイナリにシリアライズするものである。使う際には[System.Serializable]の記述が必要なので、以下のように修正。

1
2
[System.Serializable]
public class Player {

BinaryFormatterはstreamを引数に取る必要があるので、MemoryStreamを指定する。これでシリアライズされたデータをbyte配列で取得できる。あとは、このbyte配列をEasy Save2に渡して保存すれば良い。ロードはその逆。以下にソースを示す。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Player player = new Player();
player.hp = 100;
player.name = "あいうえお";

//セーブ.
BinaryFormatter bf = new BinaryFormatter();
MemoryStream saveMem = new MemoryStream();
bf.Serialize(saveMem, player);
ES2.Save(saveMem.ToArray(), "player"); //byte配列で保存.
saveMem.Close();


//ロード.
bf = new BinaryFormatter();
MemoryStream loadMem = new MemoryStream(ES2.LoadArray<byte>("player"));
Player loadPlayer = (Player)bf.Deserialize(loadMem);
loadMem.Close();

print(loadPlayer.name); //あいうえお
print(loadPlayer.hp); //100

これで動くことは動くのだが、非常に残念なことに、BinaryFormatterはiOSだと動かないらしい。
仕方ないのでJSONでも保存してみる。

ListJSONでJSONにシリアライズして保存する

クラスをJSONにシリアライズするのにLitJSONを使う。
準備として、上記ページからLitJSONのdllをダウンロードし、UnityのProjectのPluguinsフォルダに突っ込む。
JSONにシリアライズしたら、stringとして保存すれば良い。ソースを以下に示す。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Player player = new Player();
player.hp = 100;
player.name = "あいうえお";

//セーブ.
string saveJson = LitJson.JsonMapper.ToJson(player);
ES2.Save(saveJson, "player");

//ロード.
string loadJson = ES2.Load<string>("player");
Player loadPlayer = LitJson.JsonMapper.ToObject<Player>(loadJson);

print(loadPlayer.name); //あいうえお
print(loadPlayer.hp); //100

確認バージョン

Unity 4.6

Unityカテゴリの記事
AnimatorのCulling Modeでハマった話
Vectrosityを使ってUGUI上で線や円のアニメーションをする
スプレッドシートからjsonデータを読み込む
ビジュアルノベルアセットFungusにコマンドを追加してカスタマイズする
Skinned Mesh Renderer の Boundsについて
シーンごとにビルド結果の容量を出す
シーンビューにクオリティ設定のスライダーを出すエディタ拡張
ビルド結果のFile headersが大きい理由
フリーのビジュアルノベルアセットFungusを使ってRPGのイベントを作る
Move To View を改良する
フリーのビジュアルノベルアセットのFungusが便利
Visual Studio で保存時にフォーマットする
スプレッドシートからデータを読み込む
ShaderでSpriteの色相をシフトする
Sprite、Texture の 色相をシフトする
uGUIのButtonをクリック時にハイライトのままになる
uGUIのCanvas Groupを使って透過処理をしたり、操作を制限する
自作のコンフィグ画面に必要なもの
uGUIでトグルなボタンを作る
uGUI で動的にボタンを作る
Easy Save2 を使ってみる
csv読み込んで ローカライズ
LoadLevelAdditive で共通シーンを加算
画面全体に色をかける
Any State でどこからでも遷移できるようにする
iTween のStop ではまる
sprite の multiple で 境界がおかしくなる
2D画面に線を引く Line Renderer
Renderer の Materials を スクリプトから設定する
背景をスクロールさせる