LoginSignup
15
16

More than 5 years have passed since last update.

Unityでデータを暗号化・圧縮して保存する

Posted at

データを保存するUnityパッケージを作ってみた。
オプションで暗号化と圧縮ができる。

UnityDataSerializer

使い方

// set
DataSerializer.SetData ("key", 999);
// get
int data = DataSerializer.GetData<int> ("key");
// ファイルに保存
DataSerializer.Apply ();

という感じで使う。
Applyを呼ぶまではファイルに書き出されないので、適当なタイミングでApplyする。

Serializableのデータなら保存できるので、

[Serializable]
private class Data {
    public int IntVal;
    public string StrVal;
    public Data(int i, string s) {
        IntVal = i;
        StrVal = s;
    }
}

という感じのクラスを作って、

// set
DataSerializer.SetData ("data", new Data(100, "test"));
// get
Data data = DataSerializer.GetData<Data> ("data");

というのもOK。
ListやDictionaryもそのまま保存できる。

暗号化

DataSerializer.EnableEncryption("keyxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "ivxxxxxxxxxxxxxx");

予め上記のメソッドで暗号化を有効化した後にSetDataを呼べば、AES-CBCで暗号化されて保存される。

圧縮

DataSerializer.EnableCompression ();

暗号化と同様、上記のメソッドで圧縮を有効化してからSetDataすれば、gzipで圧縮される。
なお、Windows環境には圧縮は未対応。
ちなに圧縮処理は結構遅いので、特に理由が無ければ使わない方が良いかも。。。

その他のメソッド

// SetDataは第3引数をtrueにすると、このデータは即ファイルに書き込む
DataSerializer.SetData ("key", 999, true);

// GetDataは第2引数にデフォルト値を指定可能
int data = DataSerializer.GetData<int> ("key", 10);

// データ削除。第2引数はSetData同様、即ファイル書き込みするか(オプション)
DataSerializer.RemoveData("key", true);

// ファイルから事前ロード
DataSerializer.PreLoad("key1", "key2" /*, key3... */);

やってること

BinaryFormatterでシリアライズして、キー毎にファイルを作って保存する。
保存先は Application.persistentDataPath 配下。
ファイルアクセスを減らすため、キャッシュを経由して読み書きする。
そのため一度読んだデータは次からはキャッシュから読み、
書き込みもApplyするまではキャッシュに書き込むだけ。

以上。

15
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
16