【Unityメモ書き7】セーブデータの保存

クロ 今回も
超初心者なネタをやっていきますよ〜
おそらく、普通のプログラマーさんなら迷わないと思います
とはいえ
AndroidやiOSとの
マルチプラットフォーム対応を考えるとどうしていいか迷ってしまうわよね
霊夢
魔理沙 ということで、ここでは
Unityの機能を使って無理なく実装してみよう
といった趣旨の感じになるぞ
アセットストアを漁れば
ゲームデータ保存のアセットとか出てくると思います
高機能な保存がしたいという方はそちらをお使いください
妖夢

クロ 今回ご紹介するのは
OSのシステム領域に保存されるため
なるべく軽いデータだけにしましょう
ゲームの中断データやユーザーメイクデータなどは
データが大きくなりがちなので
推奨しないわ。あと保存方法もさほどしっかりしてるものではないしね
霊夢
魔理沙 ランキングデータやコンフィグデータなど
ゲームのシステムに関わるもの
に使うといいかもしれないな

Player Prefsを使う


// 保存
PlayerPrefs.SetInt(string key, int i);
PlayerPrefs.SetFloat(string key, float f);
PlayerPrefs.SetString(string key, string s);

// 読み込み
int i =PlayerPrefs.GetInt(string key);
float f =PlayerPrefs.GetFloat(string key);
string s =PlayerPrefs.GetString(string key);
上のコードだけで
セーブ&ロードが出来ます
1変数=1セーブと言った感じで保存する内容が多いと使いづらいですよね
妖夢
   
    /// ==============================================================
    ///  セーブ処理 
    /// --------------------------------------------------------------
    /// 
    /// ==============================================================
    public static void SetSaveData()
    {
        // セーブ用にJSON型に変換
        GameDataSaveScript mData = new GameDataSaveScript();
        mData.mHighHitRate = mHighHitRate;      // 最高命中率スコア
        mData.mHighDodgeRate = mHighDodgeRate;  // 最高回避率スコア
        mData.mHighTurnRate = mHighTurnRate;    // 最高ターンスコア
        mData.mHighScore = mHighScore;          // ハイスコア

        mData.mIsPlayBGM = mIsPlayBGM;      // BGM
        mData.mIsPlaySE = mIsPlaySE;        // SE
        mData.mIsLiteMode = mIsLiteMode;    // 軽量化モード
        // JSON型に変化
        string lStringSaveData = JsonUtility.ToJson(mData);
        PlayerPrefs.SetString("SaveData", lStringSaveData);

        Debug.Log("セーブ処理");
        Debug.Log(lStringSaveData);
    }


    /// ==============================================================
    ///  ロード処理 
    /// --------------------------------------------------------------
    /// 
    /// ==============================================================
    public static void SetLoadData()
    {
        // ロード
        string lStringSaveData = PlayerPrefs.GetString("SaveData", "");    // セーブデータ

        // データがない
        if (lStringSaveData == "")
        {
            return;
        }

        // Json型から指定の型に変更
        GameDataSaveScript mData = JsonUtility.FromJson< GameDataSaveScript>(lStringSaveData);

        mHighHitRate = mData.mHighHitRate;      // 最高命中率スコア
        mHighDodgeRate = mData.mHighDodgeRate;  // 最高回避率スコア
        mHighTurnRate = mData.mHighTurnRate;    // 最高ターンスコア
        mHighScore = mData.mHighScore;          // ハイスコア

        mIsPlayBGM = mData.mIsPlayBGM;  // BGM
        mIsPlaySE = mData.mIsPlaySE;    // SE
        mIsLiteMode = mData.mIsLiteMode;    // 軽量化モード

        Debug.Log("ロード処理");
        Debug.Log(lStringSaveData);
    }
  
クロ これ、最近作ったゲームの生コードなんですが
この部分はおそらく同じような形になると思うのでそのまま載せます
Jsonを使って複数の変数を一つのデータで保存しています
保存したいデータの
J
受け皿となるClassを一つ書いてその中にデータを入れるの
それをJson変換でテキスト化しているわ
霊夢
魔理沙 Jsonっていうのは
複数のプログラム間でデータの行き来をしやすくした
テキストデータみたいな感じだ
Web系でよく使われている気がします
CSVもその一つですねJSONは親子構造も可能なので
クラスや構造体のデータを保存したいときに扱いやすいです
妖夢
クロ 今回は軽めでした
冬月が大規模開発をはじめてまた保存方法が必要になった時
改めてセーブデータのメモ書きをしたいと思います

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です