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

スマゲ

スマートなゲームづくりを目指して日々精進

Unityのplayerprefsでbool(真偽値)を保存する

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
    }
}

出力
f:id:sanukin39:20160822005253p:plain

■まとめ
本当はPlayerPrefsの拡張メソッドを作成したり、継承して拡張を行ったりしたかったが、PlayerPrefsがseladedだったため、断念した。
UnityのPlayerPrefsは最低限の機能しか持っていないため、ちょっと凝ったゲームを作る時は独自のラップ用のクラスを作成してそこからデータ操作を行うようにすると、いろいろカスタマイズできて良い

■関連
UnityのPlayerPrefsでデータをセーブする - スマゲ

■参考
Player prefs and bool - Unity Answers
sealed (C# リファレンス)