AppSeedのアプリ開発ブログ

アプリ開発会社AppSeed(アップシード)開発担当のブログです。iOS、Android、Unity、Cocos2d-xなどアプリ開発関連のTipsや備忘録、アプリ開発に役立つ情報を発信します。

【Unity】PlayerPrefsでBool型の値を保存する方法

https://unity3d.com/files/images/ogimg.jpg?1

Unityで開発したアプリで、設定ON・OFFのパラメータを保存したい場面があったのですが、Unityアプリのセーブデータ保存や読み込みに便利なPlayerPrefsではBool型の値は保存できないということがわかったので、どうにかPlayerPrefsでBool型を保存する方法がないか調べてみた結果をまとめておこうと思います。

 

 

 

 


UnityのPlayerPrefsはBool型の値を保存できない

最近知ったのですが、Unityアプリでデータを保存したより保存したデータを読み込んだりする時によく使うPlayerPrefsは、
Bool型の値を保存できないようです。
下記のドキュメントによると、PlayerPrefsで保存できるのは以下だけっぽい

  • Float
  • Int
  • String


docs.unity3d.com

まあ、Int型で0か1を保存してBoolの代わりにするとか、String型で"true" "false"を保存するっていうことはできるから、
わざわざBool型で保存する必要はなかったんですが、
なんとなくどうせ保存するならBool型で保存したいと思ったので、
PlayerPrefsにBool型の値を保存する方法を検討してみました。


PlayerPrefsでBool型の値を保存する方法

検討した結果、以下の方法であればPlayerPrefsにBool型の値を保存できそうです。

//SettingData.cs
using UnityEngine;

public static class SettingData
{
    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);
    }
}

//保存方法(trueは保存する値)
SettingData.SetBool("キー", true);

//読み込み方法(trueは初期値)
bool status = SettingData.GetBool("キー", true);

上記のやり方であれば、PlayerPrefsのデータを全て削除したい場合に一緒に削除できたりするので便利です。
(実際にはPlayerPrefsに保存しているのはInt型ですが、PlayerPrefsにBool型で保存している感じを出したかったのでこれでOK)