Open1

[Unity] PlayerPrefsで自作クラス保存

gonCgonC

int,bool,string以外の型をPlayerPrefsで保存できる

PlayerPrefsHelper
using UnityEngine;

/// <summary>
/// 指定したクラスを string 型の Json 形式で PlayerPrefs クラスにセーブ・ロードするためのヘルパークラス
/// </summary>
public static class PlayerPrefsHelper
{
    /// <summary>
    /// 指定したキーのデータが存在しているか確認
    /// </summary>
    /// <param name="key"></param>
    /// <returns></returns>
    public static bool IsExistKey(string key)
    {
        // 指定したキーのデータが存在しているか確認して、存在している場合は true 、存在していない場合には false を戻す
        return PlayerPrefs.HasKey(key);
    }

    /// <summary>
    /// 指定されたオブジェクトのデータをセーブ
    /// </summary>
    /// <typeparam name="T">セーブする型</typeparam>
    /// <param name="key">データを識別するためのキー</param>
    /// <param name="obj">セーブする情報</param>
    public static void SaveObject<T>(string key, T obj)
    {

        // オブジェクトのデータを Json 形式に変換
        string json = JsonUtility.ToJson(obj);

        // セット
        PlayerPrefs.SetString(key, json);
        // セットした Key と json をセーブ
        PlayerPrefs.Save();
    }

    /// <summary>
    /// 指定されたオブジェクトのデータをロード
    /// </summary>
    /// <typeparam name="T">ロードする型</typeparam>
    /// <param name="key">データを識別するためのキー</param>
    /// <returns></returns>
    public static T LoadObject<T>(string key)
    {

        // セーブされているデータをロード
        string json = PlayerPrefs.GetString(key);

        // 読み込む型を指定して変換して取得
        return JsonUtility.FromJson<T>(json);
    }

    /// <summary>
    /// 指定されたキーのデータを削除
    /// </summary>
    /// <param name="key"></param>
    public static void RemoveObject(string key)
    {

        // 指定されたキーのデータを削除
        PlayerPrefs.DeleteKey(key);

    }

    /// <summary>
    /// すべてのセーブデータを削除
    /// </summary>
    public static void AllClear()
    {
        // すべてのセーブデータを削除
        PlayerPrefs.DeleteAll();
    }

    /// <summary>
    /// 整数データのセーブ
    /// </summary>
    /// <param name="key"></param>
    /// <param name="saveValue"></param>
    public static void SaveInt(string key, int saveValue)
    {

        // 整数データのセットとセーブ
        PlayerPrefs.SetInt(key, saveValue);
        PlayerPrefs.Save();
    }

    /// <summary>
    /// 整数データのロード
    /// </summary>
    /// <param name="key"></param>
    /// <returns></returns>
    public static int LoadInt(string key)
    {

        // 整数データのロード
        return PlayerPrefs.GetInt(key);
    }

    /// <summary>
    /// 文字列データのセーブ(主に DateTime 構造体のセーブに使う)
    /// </summary>
    /// <param name="key"></param>
    /// <param name="saveValue"></param>
    public static void SaveString(string key, string saveValue)
    {
        PlayerPrefs.SetString(key, saveValue);
        PlayerPrefs.Save();
    }

    /// <summary>
    /// 文字列データのロード(主に DateTime 構造体のロードに使う)
    /// </summary>
    /// <param name="key"></param>
    /// <returns></returns>
    public static string LoadString(string key)
    {
        return PlayerPrefs.GetString(key);
    }

    /// <summary>
    /// 文字列データのセーブ(主に DateTime 構造体のセーブに使う)
    /// </summary>
    /// <param name="key"></param>
    /// <param name="saveValue"></param>
    public static void SaveFloat(string key, float saveValue)
    {
        PlayerPrefs.SetFloat(key, saveValue);
        PlayerPrefs.Save();
    }

    /// <summary>
    /// 文字列データのロード(主に DateTime 構造体のロードに使う)
    /// </summary>
    /// <param name="key"></param>
    /// <returns></returns>
    public static float LoadFloat(string key)
    {
        return PlayerPrefs.GetFloat(key);
    }

    /// <summary>
    /// Boolデータのセーブ
    /// </summary>
    /// <param name="key"></param>
    /// <param name="saveValue"></param>
    public static void SaveBool(string key, bool saveValue)
    {
        PlayerPrefs.SetInt(key, saveValue ? 1 : 0);
        PlayerPrefs.Save();
    }

    /// <summary>
    /// Boolデータのロード
    /// </summary>
    /// <param name="key"></param>
    /// <returns></returns>
    public static bool LoadBool(string key, bool def = false)
    {
        int value = PlayerPrefs.GetInt(key, def ? 1 : 0);
        return value == 1;
    }

}