前提
Unityでゲームを開発中です。
セーブ&ロードをボタンで操作したいと思い、"QuickSave"という無料アセットを導入しました。
参考にしているのは、
Assets > QuickSave > Example
の中にある、ExampleSceneというシーンです。
入力欄に文字を入れて[Save]ボタンを押せば、入力内容を記録したJsonファイルが所定の場所に作成され、
[Load]ボタンを押せばそのJsonファイルからデータが呼び出されます。
ところが、このJsonファイルは、暗号化されていません。
"QuickSave"には暗号化&圧縮の機能もあるのですが、このExampleSceneには実装されていないようです。
そこで、以下の2件のサイトを参考に、暗号化&圧縮を試みたのですが、うまくいきませんでした。
実現したいこと
- アセット"QuickSave"を使用し、
- セーブ&ロードをボタンで操作、かつ、
- セーブデータは暗号化&圧縮されていること
SaveボタンとLoadボタンにアタッチされているスクリプトのソースコード
C#
1//セーブ&ロードはちゃんとできますが、暗号化・圧縮はされません。 2using CI.QuickSave; 3using UnityEngine; 4using UnityEngine.UI; 5 6public class ExampleSceneManagerController : MonoBehaviour 7{ 8 public InputField Input1; 9 public InputField Input2; 10 public InputField Input3; 11 public InputField Input4; 12 public InputField Input5; 13 public InputField Input6; 14 public InputField Input7; 15 public InputField Input8; 16 public InputField Content; 17 18 public void Save() 19 { 20 QuickSaveWriter.Create("Inputs") 21 .Write("Input1", Input1.text) 22 .Write("Input2", Input2.text) 23 .Write("Input3", Input3.text) 24 .Write("Input4", Input4.text) 25 .Commit(); 26 Content.text = QuickSaveRaw.LoadString("Inputs.json"); 27 } 28 29 public void Load() 30 { 31 QuickSaveReader.Create("Inputs") 32 .Read<string>("Input1", (r) => { Input5.text = r; }) 33 .Read<string>("Input2", (r) => { Input6.text = r; }) 34 .Read<string>("Input3", (r) => { Input7.text = r; }) 35 .Read<string>("Input4", (r) => { Input8.text = r; }); 36 } 37}
試したこと
上記2件のサイトを参考に、スクリプトを以下の様に変更しました。
C#
1using CI.QuickSave; 2using UnityEngine; 3using UnityEngine.UI; 4 5public class ExampleSceneManagerController : MonoBehaviour 6{ 7 public InputField Input1; 8 public InputField Input2; 9 public InputField Input3; 10 public InputField Input4; 11 public InputField Input5; 12 public InputField Input6; 13 public InputField Input7; 14 public InputField Input8; 15 public InputField Content; 16 public QuickSaveSettings settings; 17 18 private void Start() 19 { 20 QuickSaveSettings settings = new QuickSaveSettings(); 21 settings.SecurityMode = SecurityMode.Aes; 22 settings.Password = "PassWord"; 23 settings.CompressionMode = CompressionMode.Gzip; 24 } 25 26 public void Save() 27 { 28 QuickSaveWriter.Create("Inputs", settings) 29 .Write("Input1", Input1.text) 30 .Write("Input2", Input2.text) 31 .Write("Input3", Input3.text) 32 .Write("Input4", Input4.text) 33 .Commit(); 34 Content.text = QuickSaveRaw.LoadString("Inputs.json"); 35 } 36 37 public void Load() 38 { 39 QuickSaveReader.Create("Inputs", settings) 40 .Read<string>("Input1", (r) => { Input5.text = r; }) 41 .Read<string>("Input2", (r) => { Input6.text = r; }) 42 .Read<string>("Input3", (r) => { Input7.text = r; }) 43 .Read<string>("Input4", (r) => { Input8.text = r; }); 44 } 45}
Visual Studio 2022上ではエラーは現れませんが、Unityで実行し、[Save]ボタンを押すと、
何もセーブされない上に、以下のエラーメッセージが出ます。
発生している問題・エラーメッセージ
NullReferenceException: Object reference not set to an instance of an object CI.QuickSave.QuickSaveBase.Load (System.Boolean rootMightNotExist) (at Assets/QuickSave/QuickSaveBase.cs:53) CI.QuickSave.QuickSaveWriter.Create (System.String root, CI.QuickSave.QuickSaveSettings settings) (at Assets/QuickSave/QuickSaveWriter.cs:40) ExampleSceneManagerController.Save () (at Assets/QuickSave/Example/ExampleSceneManagerController.cs:28) UnityEngine.Events.InvokableCall.Invoke () (at <3be1a7ff939c43f181c0a10b5a0189ac>:0) UnityEngine.Events.UnityEvent.Invoke () (at <3be1a7ff939c43f181c0a10b5a0189ac>:0) UnityEngine.UI.Button.Press () (at Library/PackageCache/com.unity.ugui@1.0.0/Runtime/UI/Core/Button.cs:68) UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) (at Library/PackageCache/com.unity.ugui@1.0.0/Runtime/UI/Core/Button.cs:110) UnityEngine.EventSystems.ExecuteEvents.Execute (UnityEngine.EventSystems.IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData) (at Library/PackageCache/com.unity.ugui@1.0.0/Runtime/EventSystem/ExecuteEvents.cs:50) UnityEngine.EventSystems.ExecuteEvents.Execute[T] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.ExecuteEvents+EventFunction`1[T1] functor) (at Library/PackageCache/com.unity.ugui@1.0.0/Runtime/EventSystem/ExecuteEvents.cs:262) UnityEngine.EventSystems.EventSystem:Update() (at Library/PackageCache/com.unity.ugui@1.0.0/Runtime/EventSystem/EventSystem.cs:385)
どうすればよいのか、ご教唆いただければ助かります。
補足情報(FW/ツールのバージョンなど)
Unityバージョン:2020.3.32f1 Personal
