Unity - Quick Save:データのセーブ・ロード・暗号化などができる無料アセットを使ってみる -
初めに
Quick Save というデータのセーブ・ロード・暗号化などができる無料アセットについて、まとめてみます。
Index
ダウンロード・インポート
Asset Store からダウンロードできます。
assetstore.unity.com
ダウンロード後は、Package Manager から Import します。
インポート後にエラーを吐く
インポート後に、次のようなエラーを吐くことがあります。
Multiple precompiled assemblies with the same name Newtonsoft.Json.dll included or the current platform. Only one assembly with the same name is allowed per platform.
原因は、Unity2020以降のVersionControl が Newtonsoft.Json を利用するようになり、すでに Newtonsoft.Json.dll が含まれているからだそうです。ようするに、同じファイルが重複してあることが問題となり、エラーになっています。
解決策は、重複しているファイルを消すことです。具体的にファイルを消す方法は次のリンク先で分かりやすく説明してくださっています。
Quick Save の使い方
ドキュメント
セーブ:QuickSaveWriter
using System.Collections; using System.Collections.Generic; using UnityEngine; using CI.QuickSave; //追加 public class SaveTestScript : MonoBehaviour { void Start() { //保存先の確認 Debug.Log("保存先:" + Application.persistentDataPath); // QuickSaveWriterのインスタンスを作成 QuickSaveWriter writer = QuickSaveWriter.Create("Player"); // データを書き込む writer.Write("Name", "Fine"); writer.Write("Position", Vector3.zero); writer.Write("Level", 5); // 変更を反映 writer.Commit(); } }
各関数の役割、引数は次の通りとなります。
(作成された Json ファイル)
デフォルトの保存先は、Application.persistentDataPath で確認できます。
ロード:QuickSaveReader
QuickSaveReader の Read 関数を用いて、データを読み込みます。
// QuickSaveReaderのインスタンスを作成 QuickSaveReader reader = QuickSaveReader.Create("Player"); // データを読み込む string name = reader.Read<string>("Name"); Vector3 position = reader.Read<Vector3>("Position"); int time = reader.Read<int>("Level"); Debug.Log("name:" + name + ", position:" + position + ", time:" + time);
(実行結果)
保存先の変更:QuickSaveGlobalSettings.StorageLocation
QuickSaveGlobalSettings.StorageLocation を用いて、保存先の変更ができます。
// データの保存先をApplication.dataPathに変更 QuickSaveGlobalSettings.StorageLocation = Application.dataPath;
暗号化・圧縮:QuickSaveSettings
QuickSaveSettings を用いて、暗号化・圧縮していきます。
// QuickSaveSettingsのインスタンスを作成 QuickSaveSettings settings = new QuickSaveSettings(); // 暗号化の方法 settings.SecurityMode = SecurityMode.Aes; // Aesの暗号化キー settings.Password = "Password"; // 圧縮の方法 settings.CompressionMode = CompressionMode.Gzip;
暗号化の方法は Security Mode で選択します。SecurityMode は次の3つから選択できます。
Base64 は精確には暗号化ではありません。簡単にもとに戻せてしまいます。そのため、暗号化したい場合は、Aes を用いましょう。
圧縮の方法は CompressionMode で指定します。None と Gzip しか選択肢がないため、Gzip を指定しましょう。
暗号化・圧縮をする場合は、QuickSaveWriter、QuickSaveReader の第2引数に QuickSaveSettings のインスタンスを渡しましょう。
// QuickSaveSettingsのインスタンスを作成 QuickSaveSettings settings = new QuickSaveSettings(); // QuickSaveWriterのインスタンスを作成 QuickSaveWriter writer = QuickSaveWriter.Create("Player", settings); // QuickSaveReaderのインスタンスを作成 QuickSaveReader reader = QuickSaveReader.Create("Player", settings);
動作確認用スクリプト
using System.Collections; using System.Collections.Generic; using UnityEngine; using CI.QuickSave; public class SaveTestScript : MonoBehaviour { // Start is called before the first frame update void Start() { // QuickSaveSettingsのインスタンスを作成 QuickSaveSettings settings = new QuickSaveSettings(); // 暗号化の方法 settings.SecurityMode = SecurityMode.Aes; // Aesの暗号化キー settings.Password = "Password"; // 圧縮の方法 settings.CompressionMode = CompressionMode.Gzip; PlayerSave(settings); PlayerLoad(settings); } public void PlayerSave(QuickSaveSettings set) { Debug.Log("保存先:" + Application.persistentDataPath); // QuickSaveWriterのインスタンスを作成 QuickSaveWriter writer = QuickSaveWriter.Create("Player", set); // データを書き込む writer.Write("Name", "Fine"); writer.Write("Position", Vector3.zero); writer.Write("Level", 5); // 変更を反映 writer.Commit(); } public void PlayerLoad(QuickSaveSettings set) { // QuickSaveReaderのインスタンスを作成 QuickSaveReader reader = QuickSaveReader.Create("Player", set); // データを読み込む string name = reader.Read<string>("Name"); Vector3 position = reader.Read<Vector3>("Position"); int level = reader.Read<int>("Level"); Debug.Log("name:" + name + ", position:" + position + ", level:" + level); } }
(実行結果)
最後に
インストール時のエラーさえ何とかなれば、非常に使いやすいかったです。パスワードは簡単に分かるものにしないように注意してください。