テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

暗号化できるPlayerPrefs。ZDatabase

あけましておめでとうございます。
今年もよろしくお願いします。

m(_ _)m



PlayerPrefsは手軽に使えて便利だ。
構造が非常にシンプルだし、SQL設計無しでもある程度使える。逆にデータベースの高速検索や集計等も便利だが、ゲームのデータ保存レベルで組み込むには少々オーバーな気がする。

とは言え、PlayerPrefsは余り頑丈ではない。というのも、解析しようと思えば解析できてしまうらしい。少なくとも暗号化等の改ざん防止は行ってないらしく、中々不安なデータ構造になってるらしい。

しかしあの手軽さは捨てがたい。
なので、暗号化出来るPlayerPrefsを探してみた。


■ZDatabase
スクリーンショット 2013-01-04 22.48.45

ZDatabaseは一言で言えば暗号化出来るPlayerPrefsだ。
使ってみた感じ、セットアップ不要で使えて非常に手軽だった。

さらに保存できる型はStr/int/floatだけでなく、色々と追加されているらしい。

string / Int / float / Texture2D
Vector2 / Vector3 / Vector4
byte / bool / Guid

何故か入ってるTexture2D… まあ需要はあるんだけどね

対応プラットフォームも多く、Android/iOS/Web/PCと、どうやって調べたのかWiiやらPS3やらXboxも入ってる。

ちなみにクエリ検索等の機能は備えていない模様。
必要なら別途DBアクセスするアセットを購入する感じになると思う。

Zdatabase(AssetStore)
https://www.assetstore.unity3d.com/#/content/5454

値段も$10とお手頃なので、お手軽クラック対策として良いかもしれない。
■使い方メモ

ドキュメント(英語)
http://forum.unity3d.com/attachment.php?attachmentid=41513&d=1354744425

ZDatabase.instance.ChangeDBKey(byte newKey)
DBのキーを更新する。newkeyは最低32バイト以上

ZDatabase.instance.WriteString(string KeyCode, 対応の型 value)
ZDatabase.instance.WriteEnc(string KeyCode, 対応の型 value)
対応の型の値を保存。何故か個別の関数がないので、事故注意。
全て共通で、後ろにEncと付けると暗号化してくれる。

ZDatabase.instance.ReadInt(string KeyCode, int 初期値)
ZDatabase.instance.ReadEncInt(string KeyCode, int 初期値)

対応の型から値を取り出す。上はintの例。
暗号化したデータはEncと名前についたメソッドで取り出す。



ガチでクラック対策するならデータ管理はサーバーサイドにするべきだと思う。