【Unity】PlayersPrefsでゲームデータを保存する

データを保存する時には変数を一括で定義してまとめて保存すると便利。

[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");
    }
}

 

ABOUTこの記事をかいた人

個人アプリ開発者。Python、Swift、Unityのことを発信します。月間2.5万PVブログ運営。 Twitter:@yamagablog