はじめに
ちょっとしたデータを保存したい時に便利なPlayerPref。
しかし対応している型が
- int
- float
- string
の3つしかありません。
使っていく上で、bool型やoject型を保存したくなるので、備忘録として書いておきます。
環境
- Unity 2020.1.7f1
実装
PlayerPrefsUtil.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public static class PlayerPrefsUtil
{
public static bool GetBool(string key, bool defaultValue)
{
if (!PlayerPrefs.HasKey(key))
{
return defaultValue;
}
return GetBool(key);
}
public static bool GetBool(string key)
{
return PlayerPrefs.GetInt(key) != 0;
}
public static void SetBool(string key, bool value)
{
PlayerPrefs.SetInt(key, value ? 1 : 0);
}
public static T GetObject<T>(string key, T defaultValue)
{
if (!PlayerPrefs.HasKey(key))
{
return defaultValue;
}
return GetObject<T>(key);
}
public static T GetObject<T>(string key)
{
string json = PlayerPrefs.GetString(key, "{}");
return JsonUtility.FromJson<T>(json);
}
public static void SetObject<T>(string key, T value)
{
string json = JsonUtility.ToJson(value);
PlayerPrefs.SetString(key, json);
}
}
使い方
PlayerPrefsと同じような使い方になるように作成しました。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
PlayerPrefsUtil.SetBool("bool_test", true);
Debug.Log(PlayerPrefsUtil.GetBool("bool_test"));
// True
var saveData = new SaveData("test", 100);
PlayerPrefsUtil.SetObject<SaveData>("obj_test", saveData);
var obj = PlayerPrefsUtil.GetObject<SaveData>("obj_test");
Debug.Log(obj.ToString());
// name:test, score:100
}
}
[System.Serializable]
public class SaveData
{
public string name;
public int score;
public SaveData(string name, int score)
{
this.name = name;
this.score = score;
}
public override string ToString()
{
return string.Format("name:{0}, score:{1}", this.name, this.score);
}
}
まとめ
本当ならPlayerPrefsの拡張で作りたかったけど、できなかったので別メソッドで作成しました。
コメント