個人作成のRPGゲームで出てくるキャラをセーブで保存する方法が、簡単だったのでメモ。
ざっくりいうとポケモンやドラクエモンスターズみたいなゲームなのですが、パーティのモンスターはUnityのインスペクターから設定していました。
が、モンスターを新たに仲間にする処理や、セーブ機能の実装を考えた時に、仲間にしたタイミングで手持ちのデータを保持しておきたいなと考えました。
今日そのソースをかけたので簡単に共有します。
セーブ・ロード機能
セーブ:モンスターデータをJson形式に変えて、Jsonファイルに書き出し
ロード:Jsonファイルのデータを読み込んでモンスター生成
以下ソース。
セーブ
StreamWriter writer;
// monster <= Monster型
string jsonstr = JsonUtility.ToJson(monster);// モンスター情報をJson形式に変換
writer = new StreamWriter(Application.dataPath + "/savedata.json", false);
writer.Write(jsonstr);
writer.Flush();
writer.Close();
ロード
string datastr = "";
StreamReader reader;
reader = new StreamReader(Application.dataPath + "/savedata.json");
datastr = reader.ReadToEnd();
reader.Close();
Monster monster = JsonUtility.FromJson<Monster>(datastr); // JsonデータをMonter型にパース
// monsters <= List<Monster>
monsters.Add(monster);
JsonファイルはAssetフォルダ内に`savedata.json'というファイル名で保存されます。
(すでにある場合は上書き保存)
実際のソースは手持ちのモンスター分書き出し・読み込みを繰り返していますがもっと効率の良い方法がありそうですね。
マップ(プレイヤーがどこにいるか)、ストーリーのセーブロードも考えないといけないので、どんなデータをJsonファイルに書き出せばいいのか考えないといけませんね。