既にQiitaで同様の内容を書いている方がいらっしゃるのですが、補足と使用例を追加して書かせていただきます。
PrayerPrefsクラスに保存したデータは、一度アプリケーションを終了してもデータが残ります。
ゲームのちょっとしたセーブデータ等に用いるのであればかなり便利です。
大量に取得したりセットしたりするのには向かないので、その場合は別の方法をとりましょう。
今回は例として「何ステージまでクリアしたか」の値を保存してみることにします。
まずはサンプルスクリプトから。
using UnityEngine;
using System.Collections;
public class TestPlayerPrefs : MonoBehaviour {
void Start () {
PlayerPrefs.SetInt("CLEARSTAGE",0)
//データ名「CLEARSTAGE」に引数の0を代入
int ClearStage = PlayerPrefs.GetInt("CLEARSTAGE");
//変数「ClearStage」に「CLEARSTAGE」の値を代入
}
普通の変数と違い、いきなり「SetInt("データ名",初期値)」と書くだけでデータが作成され、初期値が代入されます。
また、「int 変数名 = GetInt("データ名",初期値)」と書いても同じことが可能です。
メソッドの第二引数は値が保存されていない時に返される値ということですね。
サンプルで使用しているint型に加え、float型とstring型が使用可能。
その場合の関数名はそれぞれ以下のようになります。
PlayerPrefs Get Float()
PlayerPrefs Get Int()
PlayerPrefs Get String()
PlayerPrefs Set Float()
PlayerPrefs Set Int()
PlayerPrefs Set String()
次に、ステージをクリアして、セーブする際に動かすメソッドです。
//スクリプトはさっきの続き
using UnityEngine;
using System.Collections;
public class TestPlayerPrefs : MonoBehaviour {
void SaveClearStage1(){
PlayerPrefs.SetInt("CLEARSTAGE", 1);
//データ名「CLEARSTAGE」に引数の1を代入しなおす
ClearStage = PlayerPrefs.GetInt("CLEARSTAGE",1);
//変数「ClearStage」に「CLEARSTAGE」の値を代入しなおす
}
やってることは先ほどと全く同じです。簡単ですね。
クリアしたステージ数によって処理が分岐する場合などは、ClearStageの値を使います。
PlayerPlefsのデータは別クラスからでもアクセスできます。
SetInt等で保存されるのは実際にはアプリケーション終了時であり、不具合等でアプリが落ちた時にはセーブされていない可能性があります。
重いので多用は避けたいですが、アプリ終了前のタイミングでデータを保存したい時はSetInt等で保存後
PlayerPrefs.Save()
を実行してください。
最後に、その他の関数です。
PlayerPrefs.DeleteAll()
そこまで保存していたPlayerPrefsのデータを全て削除します。
PlayerPrefs.DeleteKey(string key)
保存されている特定のデータを削除します。
bool b =PlayerPrefs.HasKey(string key)
bool型。特定のデータが存在するかどうかを真偽で返します。