シェアする

[Unity]データセーブPlayerPrefsについて[メモ]

PlayerPrefsについて

PlayerPrefsでは、string型のkeyと保存したい値を指定して、プレイヤーデータのセーブ、ロードなどを行える。ただし保存できるのは、float,int,stringのみ。

メソッド

PlayerPrefsにデータを設定

float型のデータを設定 void SetFloat(string key, float value)
int型のデータを設定 void SetInt(string key, int value)
string型のデータを設定 void SetString(string key, string value)

ここでは、PlayerPrefsにデータの設定を行うだけで、実際にディスクに保存されているわけではない。

PlayerPrefsのデータを取得

float型のデータを読み込む float GetFloat(string key, float defaultValue = 0.0F)
int型のデータを読み込む int GetInt(string key, int defaultValue = 0)
string型のデータを読み込む string GetString(string key, string defaultValue = “”)

PlayerPrefsのデータ管理

ディスクにデータを保存 void Save()
すべてのキーと値を削除 void DeleteAll()
key と対応する値を削除 void DeleteKey(string key)
key が存在するかを確認 bool HasKey(string key)

Save()メソッドを実行しない場合でも、アプリケーション終了時に自動でデータをディスクに保存してくれるが、正常に終了できなかった場合は保存されない。

Save()メソッドの実行は、負荷が重いためゲームプレイ中にはできるだけ行わないで、シーンのロード時などに行う。また、データを削除する場合にも、自動でSave()メソッドが実行されるためDeleteAll()、DeleteKey()メソッドを使うタイミングも考える。

なにより、バグによるデータの消滅は場合によって、プレイヤーにとって致命的なため、データを削除するようなメソッドはデバッグ時を除いてスクリプトに載せないほうがいいと思った。

float、int、string以外の型の保存

ToString()メソッドを使ってstring型に変換すると保存可能

DateTime型の例

[Unity]時間の取得と計算DateTimeの使い方[メモ]
現在日時の取得と計算に必要になるDateTime構造体とTimeSpan構造体についてのメモ。 日時の取得 DateTime構造...

プロパティを使って実装

使い道

重要なデータはサーバーに保存するほうが、チート対策的にはいいらしい。なのでPlayerPrefsでは、サーバーからデータを送ってもらうときに、プレイヤーを認証するためのユーザーIDの保持に使うのがよさそう。

それ以外としては、アプリ起動時にUIなど(スクロールの位置とか?)を前回の続きから表示させるなど、基本的にチートされても困らないようなデータを保存する。

参考

公式リファレンス

フォローする