見出し画像

初心者向け無料便利アセット紹介~Unityで簡単セーブ&ロード編~

 ゲームを作る際は大抵実装する必要がある"セーブ&ロード"機能。

 Unityでは簡単にセーブ&ロード機能を実装できるPlayerPrefsがありますが
 「PlayerPrefsは保存形式が少ないから.……」
 「PlayerPrefsはあまり使うなって記事を見たから.……」
 などなど、様々な理由があるとは思いますが、敬遠している人も多いのではないでしょうか。

 また、「そこまで凝ったゲームを作るつもりはないから、あまりお金をかけたくないし……」という人もいるのでは?

 そこで今回は、無料 簡単 高機能なセーブ&ロード機能のアセットを紹介します。



QuickSave

 アセットストアから無料でダウンロードできるアセットQuickSave

 このアセットは、今から貼るコードを参考にし、好きなように変えていただければすぐに動作します。

    using CI.QuickSave;

    /* セーブ内容をまとめるクラス */
  public class SaveData
    {
        public string name = "None";
        public int age = 20;
    }

    /* セーブ&ロードを実装するクラス */
    public static class SaveAndLoad
    {
        /* セーブ関数 */
        public static void Save(SaveData saveData)
        {
            // 保存先の確認
            // Debug.Log("保存先:" + Application.persistentDataPath);
            string fileName = "ファイルネーム";
        
            // 暗号化・圧縮設定
            QuickSaveSettings settings = new QuickSaveSettings();
            // 暗号化方法
            settings.SecurityMode = SecurityMode.Aes;
            // 暗号化パスワード
            settings.Password = "パスワード";
            // 圧縮方法
            settings.CompressionMode = CompressionMode.Gzip;

            // 保存データ書き込み
            QuickSaveWriter writer = QuickSaveWriter.Create(fileName, settings);
            // 以下セーブ内容を記述
            writer.Write("Name", saveData.name);
            writer.Write("Age", saveData.age);

            // セーブ内容を確定
            writer.Commit();
        }

        /* ロード関数 */
        public static SaveData Load()
        {
            string fileName = "ファイルネーム";
            
            // 暗号化・圧縮設定 (復号化用)
            QuickSaveSettings settings = new QuickSaveSettings();
            // 暗号化方法
            settings.SecurityMode = SecurityMode.Aes;
            // 暗号化パスワード
            settings.Password = "パスワード";
            // 圧縮方法
            settings.CompressionMode = CompressionMode.Gzip;
            
            // 保存データ読み込み
            QuickSaveReader reader = QuickSaveReader.Create(fileName, settings);
            SaveData saveData = new SaveData();
            // 以下ロード内容を記述
            saveData.name = reader.Read<string>("Name");
            saveData.age = reader.Read<int>("Age");

            // ロード内容を返す
            return saveData;
        }
    }


 上記のコードにあるSaveData関数を書き換え、書き換えた内容に応じて保存データのセーブ/ロード部分を変更してください。

 スマートフォン向けゲームの場合は、OnApplicationQuit関数(アプリを閉じる瞬間に呼び出される関数)などで呼び出すとイイ感じかもしれません。

 検証したところ、セーブ関数は指定のファイルがなければ新たに生成してくれ、ファイルが存在していれば変更した値だけを上書きしてくれました。

 またコードにも書いてあるように、暗号化・圧縮なども簡単に行えます。ただし、暗号化形式は"Aes"が良いです。

 このアセットはWindows、Mac、Linux、アンドロイド、iOS、プレイステーション、Xboxなどなど、どのプラットフォームにも対応しています。


エラーが出た場合

QuickSaveException: Root does not exist

・セーブの際に登録していないデータをロードし
ようとする
と、"QuickSaveException: Root does not exist"というエラーが出ます。このようなエラーが出た場合は、ロードする箇所をよく確認してみてください。



最後に、素晴らしいアセットを作ってくださった制作者さんに感謝を!!



いいなと思ったら応援しよう!

ToMeTo
よろしければ応援お願いします! いただいたチップはゲーム開発に役立てます!