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型の例
プロパティを使って実装
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerPrefsData : MonoBehaviour { public static string Name { get { return PlayerPrefs.GetString("key_String"); } set { PlayerPrefs.SetString("key_String", value); } } public static float Time { get { return PlayerPrefs.GetFloat("key_Float"); } set { PlayerPrefs.SetFloat("key_Float", value); } } public static int Score { get { return PlayerPrefs.GetInt("key_Int"); } set { PlayerPrefs.SetInt("key_Int", value); } } }
使い道
重要なデータはサーバーに保存するほうが、チート対策的にはいいらしい。なのでPlayerPrefsでは、サーバーからデータを送ってもらうときに、プレイヤーを認証するためのユーザーIDの保持に使うのがよさそう。
それ以外としては、アプリ起動時にUIなど(スクロールの位置とか?)を前回の続きから表示させるなど、基本的にチートされても困らないようなデータを保存する。