Developer

【初心者Unity】PlayerPrefsでデータをセーブ&ロードする方法
2021.08.31
Lv1

【初心者Unity】PlayerPrefsでデータをセーブ&ロードする方法

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クラスに用意されているすべてのメソッドを紹介しました。
簡易的にデータを保存する際に便利なクラスなのでぜひ覚えて置きましょう。

Unity実践編 - 目次リンク

実践Unityゲームプログラミング 連載目次