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

(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

PlayerPrefsでListやDictionaryの保存【Unity】

Unity

このエントリーをはてなブックマークに追加

この記事でのバージョン
Unity 5.1.0f3 Personal

はじめに

PlayerPrefsは直接ListやDictionaryの保存が出来ません

なので今回はPlayerPrefsでListやDictionaryの保存する方法の紹介です。


PlayerPrefsUtility

ListやDictionaryをそのまま保存することは出来ないので、シリアライズする必要があります。


PlayerPrefsをもっと便利に使う | プラスクリエイティブ -Lab Blog-


上記の記事を参考にListやDictionaryをPlayerPrefsに保存出来る、PlayerPrefsUtilityを作ってみました。



PlayerPrefsUtilityの使い方は以下の通りです。

//てきとうにリストとディクショナリー作成
List<int> saveList = new List<int> (){1, 2, 3};
Dictionary<string, int> saveDict = new Dictionary<string, int> (){
  {"key1", 1}, {"key2", 2}, {"key3", 3}
};

//保存
PlayerPrefsUtility.SaveList<int>         ("ListSaveKey", saveList);
PlayerPrefsUtility.SaveDict<string, int> ("DictSaveKey", saveDict);

//読み込み
List<int> loadList               = PlayerPrefsUtility.LoadList<int>         ("ListSaveKey");
Dictionary<string, int> loadDict = PlayerPrefsUtility.LoadDict<string, int> ("DictSaveKey");


見ての通り、保存時も読み込み時も型を指定します。

また、読み込みに値が保存されていない場合は、空のListやDictionaryが返ってきます。


参考までに保存された値は以下のようになっています。


f:id:kan_kikuchi:20151023133346p:plain


シリアライズされてるので、見ても分からないですね。


おわりに

オマケで先ほどのPlayerPrefsUtilityに

  • 保存&読み込みメソッドをオーバーロードで作成
  • 保存するkeyとvalueを暗号するメソッド作成(処理は未実装)

を追加したものが以下になります。


//valueはint,float,string,boolに対応
PlayerPrefsUtility.Save("key", value);

//defaultValueもint,float,string,boolに対応、指定したkeyが存在しない場合にdefaultValueが返ってくる
PlayerPrefsUtility.Load("key", defaultValue);


暗号化&復号化するメソッドはありますが何の処理もしていません。

暗号化機能を追加したい方はこのあたりを参考にどうぞ!