【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は親子構造も可能なので
クラスや構造体のデータを保存したいときに扱いやすいです
妖夢
クロ 今回は軽めでした
冬月が大規模開発をはじめてまた保存方法が必要になった時
改めてセーブデータのメモ書きをしたいと思います

気軽にコメントをどうぞ!

この記事に関すること冬月に聞きたいこと等、小さいことでもコメントしていただける嬉しいです。
冬月に直接連絡したい方は下のお問合せフォームをお使いください。(メール送信されます)

内容に問題なければ、下記の「コメントを送信する」ボタンを押してください。
※メールアドレスは公開されることは有りません。


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。

Android | iOS | PC | Unity | ゲーム製作の関連記事