UnityではPlayerPrefs
と言うローカルでデータを保存、呼び出しする機能があります。
docs.unity3d.com
カード型のように、キーと値を組み合わせて扱っており、
取り出しの関数にキーを渡せばデータが取得できるので使い勝手が良い機能です。
ただ、色々情報を集めていくうちにデメリットも見えてきました。
今回は、PlayerPrefs
を使う上での注意点をまとめていきます。
データの形式
PlayerPrefs
で保存したデータは、端末に保存されるデータ(ローカルデータ)として扱われます。
公式ページには、各端末ごとに保存先が説明されています。
Web関係の仕事をやった事がある人にとっては、WebStorageのような機能と言えば想像がつくと思います。
メリット
データベースが不要
(データの内容や目的によりけりですが、)データをやり取りする場合は、MySQLやPostgreSQL、SQLitのようなデータベース管理システムを使います。
PlayerPrefs
でデータをやり取りする場合はローカルにデータを保存します。
保存、取り出しの関数も用意されており簡単にデータをやり取りできます。
そのため、新規DBを構築する必要はなく、クエリを作る必要がありません。
オフラインでも扱える
データベースを使ってデータをやり取るする場合は、オンライン上にあるデータベースサーバーにアクセスする必要があります。
そのため、オフラインになってしまうとデータが取得できなくなってしまいます。
ただし、端末にもデータベースを持たせてオンライン時に同期させるというやり方もありますので、一概にすべてとは言えません。
PlayerPrefs
を使った場合は、端末にデータを保存するのでオフラインでもデータを扱う事が可能です。
デメリット
メリットと表裏一体ではありますが、ローカルデータである事のデメリットもあります。
データの取り回しがしずらい
データベース管理システムではないので、本格的にデータのやり取りをしようとすると弊害が出てきます。
例えば、MySQLと比較しても次のような課題があります。
- リレーションさせて、大量のデータから特定のデータ抽出が出来ない
- 複雑な型指定や制限が出来ない
- トランザクション処理が出来ない
もちろん、他にも問題もあります。
また、物理的にファイルのデータ数が多くなればなるほど検索に時間もかかります。
オンラインでは使えない
あくまでローカルファイルですので、オンラインでデータをやり取りすることは出来ません。
データの流出リスクを上げてしまう。
公式でも端末別の保存場所が説明されているように、特定の場所にデータが置かれています。
そうなると、Unityの構造を知っている人からすればデータを抜き取ることは理論上可能です。
仮に、暗号化されていれば多少は安全かもしれません。
しかし、データを抜き取られる事には変わりませんのでリスクは残り続けます。
用途
デメリットも上げてしまいましたが、別に使ってはいけない機能ではありません。
例えば、下記のような使い方であればとても効果的な使い方です。
- 個人設定(コンフィグの設定等)のような、通信を挟む必要が無いデータ
- 通信が出来ないときに一時保存するデータ