この記事でのバージョン
Unity 5.1.0f3 Personal
はじめに
PlayerPrefsは直接ListやDictionaryの保存が出来ません。
なので今回はPlayerPrefsでListやDictionaryの保存する方法の紹介です。
PlayerPrefsUtility
ListやDictionaryをそのまま保存することは出来ないので、シリアライズする必要があります。
http://lab.p-l-us-creative.com/2015/01/05/16/
上記の記事を参考に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が返ってきます。
参考までに保存された値は以下のようになっています。
シリアライズされてるので、見ても分からないですね。
おわりに
オマケで先ほどのPlayerPrefsUtilityに
- 保存&読み込みメソッドをオーバーロードで作成
- 保存するkeyとvalueを暗号するメソッド作成(処理は未実装)
を追加したものが以下になります。
//valueはint,float,string,boolに対応 PlayerPrefsUtility.Save("key", value); //defaultValueもint,float,string,boolに対応、指定したkeyが存在しない場合にdefaultValueが返ってくる PlayerPrefsUtility.Load("key", defaultValue);
暗号化&復号化するメソッドはありますが何の処理もしていません。
暗号化機能を追加したい方はこのあたりを参考にどうぞ!