データを保存する時には変数を一括で定義してまとめて保存すると便利。
[System.Serializable] public class GameData { //アイテムボックス内のアイテム public Item[] items; //GameObjectのパラメータデータを保存する public MovableObj[] param; //シナリオ public int scenario; //各種フラグ public bool[] flag; public GameData(int itemnum, int objnum, int flagnum, int s) { items = new Item[itemnum]; param = new MovableObj[objnum]; flag = new bool[flagnum]; scenario = s; } }
上記のようにSerializableをつけ、Monobehaviorはつけてはいけないのがポイント。
自分で作ったカスタムクラス(Item)には同様にSerializableをつける。
セーブ、ロード、削除は以下のようにする。
public class DataManager : MonoBehaviour { public void SaveGameData() { GameData mGameData = new GameData(ItemBox.instance.slots.Length, gameobj.Length, flag.Length, scenario); // mGameDataに中身を詰め込むコード PlayerPrefs.SetString("Parameter", JsonUtility.ToJson(mGameData)); Debug.Log("Save Finished..." + scenario); } public void LoadGameData() { var json = PlayerPrefs.GetString("Parameter", "nodata"); if (json.Equals("nodata")) { Debug.Log("nodata"); } else { GameData mGameData = JsonUtility.FromJson<GameData>(json); // mGameDataから中身を取り出す Debug.Log("Load Finished..."); } } public void Delete() { PlayerPrefs.DeleteKey("Parameter"); } }