うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【Unity】データを保存管理するライブラリ

データを保存管理するライブライブラリを作成していなかったので作成してみました

データの保存は PlayerPrefs と ファイル出力の2つの方法から選べます

また、保存時に AES 暗号を利用して暗号化することもできます

導入

Github

github.com

PackageManager

「Add package from git URL」に https://github.com/yayorozu/UnityYorozuSaveData.git をAddしてください



使い方

データを保存するクラスを作成

PlayerPrefs を利用する場合は PrefsSaveData
ファイルとして出力する場合は FileSaveData を継承してクラスを作成します

クラス毎に出力先を選べるため、消えても問題無い設定ファイルは PlayerPrefs
ユーザデータはファイルに出力するといった用途ができるようになっています

// PlayerPrefs に保存するクラス
[Serializable]
public class SaveDataTest1 : PrefsSaveData
{
}
 
// Appliction.persistentDataPathにファイルを出力して保存するクラス
[Serializable]
public class SaveDataTest2 : FileSaveData
{
}

初期化処理

このライブラリを利用する前に 初期化する必要があります
ここで用途に合わせて保存先の名前を指定したり、暗号キーを設定することができます

保存名や暗号キーを設定したあとに変更すると利用できなくなるため
変更することはできません

// 利用するための準備
SaveDataUtility.SetUp();
 
// 保存時の名前を指定する
SaveDataUtility.SetUp("MySaveData");
 
// AES暗号を利用してデータ保存時に暗号化を行う
const string AesIV = @"123456789";
const string AesKey = @"ABCDEFG";
SaveDataUtility.SetUp(AesIV, AesKey);

データの読み込み

読み込みたいデータが存在するクラスをロードして、ロードしたクラスから値を取得します

int, bool, string であれば内部で Key - Value 形式で保存できるようにしているため
変数を定義する必要が無く、enum もしくは 文字列を直接指定して取得することができます

var saveData = SaveDataUtility.Load<SaveDataTest1>();
// データの取得 from enum
var value = test.IntValue(SaveDataTest1.Key.A));
// データの取得 from string
value = test.IntValue("A"));

データの保存

読み込みと同じようにデータを保存したいクラスをロードして、ロードしたクラスに対して値をセットします

値のセット時にはデフォルトでデータを保存するようになっているため、不要な場合は別途設定する必要があります

var saveData = SaveDataUtility.Load<SaveDataTest>();
 
// データのセット enum Key
test.Set(SaveDataTest1.Key.A, 10);
// データのセット string Key
test.Set("A", 10);
 
// データのセット enum Key ※保存はしない
test.Set(SaveDataTest1.Key.A, 10, false);
// データのセット string Key※保存はしない
test.Set("A", 10, false);
 
// データ保存を反映
test.Save();

データの削除

// 指定したデータを削除する
SaveDataUtility.Delete<SaveDataTest>();
 
// すべてのデータを削除する
SaveDataUtility.DeleteAll();

保存データの中身を見る

全部の型とまではいきませんがある程度の型であれば、データの中身を Runtime で確認できるようになっています

f:id:hacchi_man:20211214000202p:plain

この際に編集も可能で値を変更してから保存することも可能です