【初心者Unity】PlayerPrefsでデータをセーブ&ロードする方法
▶
【Unity】3Dアクションゲームを作ろう!#7 ステージの作成(Skybox・落下判定)
▶
【Unity】3Dアクションゲームを作ろう!#8 ステージの作成(スイッチ・扉)
▶
【Unity】3Dアクションゲームを作ろう!#9 プレイヤーのHP管理
▶
【初心者Unity】JsonUtilityクラスでJSONを扱う方法
▶
【初心者Unity】スクリプトからコンポーネントを追加する方法
PlayerPrefsでデータをセーブ&ロードする方法
PlayerPrefsクラスを使用すると、データベースなどを使用せずにゲームシーン内のデータを保存することができます。
スコア履歴の表示や、オプション項目の設定を記憶するなど、簡易データの保存に適している仕組みです。保存したデータは削除するプログラムを実行するか、エディタ設定から削除するまで有効なので、シーンをまたいだデータの受け渡しなどにも利用できます。
実際にPlayerPrefsを使用している実践編はこちら↓
【Unity実践】#9 プロトタイプ編 ~ シーンの制御 part1 ~【Boxゲーム】
データを保存(セーブ)する
データを保存するには2ステップ必要です。
1.Set〇〇メソッドにて、保存したいデータをキーと値のペアとしてセットする
2.Saveメソッドを実行する
保存できるデータ型は、整数型(int)、浮動小数点型(float)、文字列型(string)の3種類です。
それぞれのデータ型に対応するメソッドがあらかじめ用意されており、整数値を保存するならSetIntメソッドを使います。
また、キーは文字列で自由に指定します。保存される値が連想しやすい名前を付けると良いです。
Saveメソッドを実行しないと、値は保存されませんのでご注意ください。
データを保存するサンプルコード
// キーと値をセットする PlayerPrefs.SetInt("key1", 100); PlayerPrefs.SetFloat("key2", 3.333f); PlayerPrefs.SetString("key3", "sample message"); // 保存 PlayerPrefs.Save();
データを読み込む(ロード)する
データの読み込みにはGetInt、GetFloat、GetStringのいずれかのメソッドを使い、セットと同様にデータ型でメソッドを使い分けます。
また、Get〇〇メソッドは引数の指定方法が2種類あり、キーが存在しない場合の挙動が異なります。
・ 引数に取り出したいデータのキーのみを指定する(例: GetInt(string key) → キーが存在しない場合、既定値が返される
・キーが存在しない場合に、第二引数でデフォルト値を任意に設定できる → GetInt(string key, int defaultValue)
データを読み込むサンプルコード
// キーを指定して値を読み込む(デフォルト値なし) int a1 = PlayerPrefs.GetInt("key1"); // キーkey1が存在しない場合、a1に0が入る。 float b1 = PlayerPrefs.GetFloat("key2"); // キーkey2が存在しない場合、b1に0.0が入る。 string c1 = PlayerPrefs.GetString("key3"); // キーkey3が存在しない場合、c1に""(空文字)が入る。 // キーを指定して値を読み込む(デフォルト値あり) int a2 = PlayerPrefs.GetInt("key1", 99); // キーkey1が存在しない場合、a2に99が入る。 float b2 = PlayerPrefs.GetFloat("key2", 1.11f); // キーkey2が存在しない場合、b2に1.11fが入る。 c2 = PlayerPrefs.GetString("key3", "test"); // キーkey3が存在しない場合、c2に"test"が入る。
データが保存されているか確認する
「データが保存されている=キーが存在する」として考えます。
HasKey(string key)メソッドを使うと、キーが存在するかチェックできます。
データが保存されているか確認するサンプルコード
// キーkey1が存在する場合、existにtrueが入り。存在しない場合falseが入る。 bool exist = PlayerPrefs.HasKey("key1"); if (exist) { // 値が保存されているときの処理 } else { // 値が保存されていないときの処理 }
保存されているデータを削除する
保存したデータを削除するためのメソッドは2種類用意されています。
・DeleteKey(string key) → キーを指定して、保存したデータを1件だけ削除する。
・DeleteAll() → すべてのデータを削除する。
保存したデータを削除するサンプルコード
// key1のデータのみを消す PlayerPrefs.DeleteKey("key1"); // 保存されているすべてのデータを消す PlayerPrefs.DeleteAll();
また、保存したデータはUnityEditor上からでも削除可能です。
Edit → 「Clear All PlayerPrefs」をクリックし、Yesを選択でデータが削除できます。
以上でPlayerPrefsクラスに用意されているすべてのメソッドを紹介しました。
簡易的にデータを保存する際に便利なクラスなのでぜひ覚えて置きましょう。