読者です 読者をやめる 読者になる 読者になる

スマゲ

スマートなゲームづくりを目指して日々精進

UnityのPlayerPrefsでデータをセーブする

Unityでデータをセーブ、ロードしたいときはPlayerPrefsを使います

保存できる値は Int, Float, String の三種類

SetInt, GetIntなどで値をセーブ、ロードできます

以下、ゲームのハイスコアなどを保存するときの簡単な使用例

using UnityEngine;
using System.Collections;

public class TestPlayerPrefs : MonoBehaviour {

	const string HIGH_SCORE_KEY = "highScore";

	void SaveHighScore(int score){
		PlayerPrefs.SetInt(HIGH_SCORE_KEY, score);
		PlayerPrefs.Save();
	}

	int LoadHighScore(){
		return PlayerPrefs.GetInt(HIGH_SCORE_KEY, -1);
	}
	
}

データのセーブは

PlayerPrefs.SetInt(HIGH_SCORE_KEY, score);

ロードは

PlayerPrefs.GetInt(HIGH_SCORE_KEY, -1);

で行っています。
ちなみにメソッドの第二引数ですが、これは値が保存されていない時に返される値になります。

セーブの後に呼ばれている

PlayerPrefs.Save();

はその名の通りデータのセーブを行っています。
このメソッドを呼ばなくてもUnityはアプリ終了時にデータを保存してくれますが、アプリのクラッシュなどが発生した時は保存できないこともあるみたいなので、大事なデータを保存するときは一緒に呼んでおいたほうが良さそうです。しかし、この処理はディスクへの書き込みを行っていることもあり、ゲーム中に頻繁に呼ぶようなことは推奨されていません。
なのでゲームのチェックポイントやリザルトなど、ここぞ!という場面で呼ぶのが良さそうです。

PlayerPrefsには他にも、
保存されている特定のデータを削除する

public static void DeleteKey(string key);

特定のデータがセーブされているか調べる

public static bool HasKey(string key);

セーブされているすべてのデータを削除する

public static void DeleteAll();


などがあり、場合によって使い分けるといいでしょう。
このようなメソッドがあるのに保存されているデータキーの一覧を取得できるメソッドが無いのはなぜだろう...

関連
Unityでbool(真偽値)を保存する - スマゲ

参照

Unity - Scripting API: PlayerPrefs