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

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

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

public class Player {

  public int hp;
  public string name;

}

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

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

[System.Serializable]
public class Player {

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

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として保存すれば良い。ソースを以下に示す。

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