Unityでboolean(真偽値)を保存してみる
■動機
UnityはPlayerPrefsを利用することで、int, float, stringの値を保存できるが、bool値は保存できない。
そのため、intやstringの値を保存するときと同様にbool値を保存するにはどのようにすれば良いか考えてみた。
■実装
まずintの1をtrue、0をfalseとして定義する。
PlayerPrefsのSetInt、GetIntを利用しながら、それらと同様のインターフェースでbool値を保存できるメソッドを作成する
using UnityEngine; public static class SaveData { public static bool GetBool(string key, bool defalutValue){ var value = PlayerPrefs.GetInt(key, defalutValue ? 1 : 0); return value == 1; } public static void SetBool(string key, bool value){ PlayerPrefs.SetInt(key, value ? 1 : 0); } }
■使い方
PlayerPrefsのSetIntやGetIntなどを利用する感覚でbool値を保存できる
using UnityEngine; using System.Collections; public class SaveDataTest : MonoBehaviour { const string DataKey = "saveDataKey"; void Start(){ Debug.Log(SaveData.GetBool(DataKey, false)); // false SaveData.SetBool(DataKey, true); // データを保存 Debug.Log(SaveData.GetBool(DataKey, false)); // true } }
出力
■まとめ
本当はPlayerPrefsの拡張メソッドを作成したり、継承して拡張を行ったりしたかったが、PlayerPrefsがseladedだったため、断念した。
UnityのPlayerPrefsは最低限の機能しか持っていないため、ちょっと凝ったゲームを作る時は独自のラップ用のクラスを作成してそこからデータ操作を行うようにすると、いろいろカスタマイズできて良い
■関連
UnityのPlayerPrefsでデータをセーブする - スマゲ
■参考
Player prefs and bool - Unity Answers
sealed (C# リファレンス)