【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メソッドを実行しないと、値は保存されませんのでご注意ください。
データを保存するサンプルコード
1 2 3 4 5 6 7 8 | // キーと値をセットする 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)
データを読み込むサンプルコード
1 2 3 4 5 6 7 8 9 10 | // キーを指定して値を読み込む(デフォルト値なし) 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)メソッドを使うと、キーが存在するかチェックできます。
データが保存されているか確認するサンプルコード
1 2 3 4 5 6 7 8 9 | // キーkey1が存在する場合、existにtrueが入り。存在しない場合falseが入る。 bool exist = PlayerPrefs.HasKey( "key1" ); if (exist) { // 値が保存されているときの処理 } else { // 値が保存されていないときの処理 } |
保存されているデータを削除する
保存したデータを削除するためのメソッドは2種類用意されています。
・DeleteKey(string key) → キーを指定して、保存したデータを1件だけ削除する。
・DeleteAll() → すべてのデータを削除する。
保存したデータを削除するサンプルコード
1 2 3 4 5 6 | // key1のデータのみを消す PlayerPrefs.DeleteKey( "key1" ); // 保存されているすべてのデータを消す PlayerPrefs.DeleteAll(); |
また、保存したデータはUnityEditor上からでも削除可能です。
Edit → 「Clear All PlayerPrefs」をクリックし、Yesを選択でデータが削除できます。
以上でPlayerPrefsクラスに用意されているすべてのメソッドを紹介しました。
簡易的にデータを保存する際に便利なクラスなのでぜひ覚えて置きましょう。