サーバーとのデータの送受信の前にやればよかった気も…(;・∀・)
Unityでゲームを作ってると、
『ベストスコアをセーブする機能』とか、
『前回までの続きをロードする機能』とか、
とかくセーブandロードの機能を持たせたくなるのが人情だと思います。
今回はそれの実装その1ということで。
とりあえず、データのセーブとロードを実装した単純なコードはこちら。
読み書きするデータの型は、Int型です。
//受け取ったデータをセーブするメソッド
void SaveScore(int score){
//受け取ったデータをセーブ
PlayerPrefs.SetInt("score",score);
Debug.Log("score="+score+":セーブしたわよッ!!(・∀・)");
}
//データをロードするメソッド
int LoadScore(){
//ロードしたデータを代入する変数
int loadedScore;
//データをロード
loadedScore=PlayerPrefs.GetInt("score");
Debug.Log("score="+loadedScore+":ロードしたわよッ!!ヽ(`Д´#)ノ");
//ロードした値を参照元に返す
return loadedScore;
}
デバッグプリントなどはとりあえず置いておいて、
実際にデータを読み書きしている部分はココです。
//受け取ったデータをセーブ
PlayerPrefs.SetInt("score",score);
//データをロード
loadedScore=PlayerPrefs.GetInt("score");
この『PlayerPrefs』てのを利用してあげると、
簡単にデータのセーブやロードが出来ます。
具体的にどの箇所にデータが保存されているかはとりあえず置いておいて…(;・∀・)
//受け取ったデータをセーブ
PlayerPrefs.SetInt("score",score);
これは、変数scoreに代入されている値を、”score”というキーをつけて保存しています。
PHPで言えば連想配列みたいな感じですかね。$data[“score”]=scoreて具合でしょうか?
こうすることで、変数score内の値が”score”という名前でセーブされるわけです。
//データをロード
loadedScore=PlayerPrefs.GetInt("score");
一方こちらは、”score”というインデックスキー付で保存されたデータを読み込み、
それを変数loadedScoreに代入しています。
こうすることで、セーブされたデータのロードが可能なのです。
また今回、データがInt型なのでそれぞれSetInt,GetIntとなっています。
このIntの部分は読み書きするデータの型によって変化します。
//float型のデータをセーブするとき
PlayerPrefs.SetFloat("score",floatScore);
//string型のデータをロードするとき
stringData=PlayerPrefs.GetString("score");
こんな感じで、セーブの時は『Set○○』、ロードの時は『Get○○』て具合で、
○○の部分は読み書きするデータの型に応じて書き換えます。
また、このPlayerPrefsを使えば、
指定されたキーの名前がついているデータがあるかどうかも確認出来まして…
//キー"score"のデータがセーブされているか確認する if(PlayerPrefs.HasKey("score")){ //データをロード loadedScore=PlayerPrefs.GetInt("score"); Debug.Log("score="+loadedScore+":ロードしたわよ(・∀・)"); } else{ Debug.Log("そんなデータ保存されてないわよッ!!ヽ(`Д´#)ノ"); }
こうして『PlayerPrefs.HasKey』を使ってあげると、
指定したキーのデータの有無がbool型で返されるので、
エラーチェックなんかにも使えそうですね。
あとは、『このキーのデータがなかったら、新しくデータ作ってセーブしときなさい』
的な使い方も出来そうです。
ところで、このPlayerPrefsですが、
読み書き出来るデータの型が『Int』『Float』『String』だけのようです。
また、配列は読み書き不可のようです。
また、『SetString』『GetString』は半角英数の読み書きは可能ですが、
日本語の読み書きに関しては若干問題があるご様子。
次回はその辺を解決したいなぁと思います。