Utilクラスはこちらを拝借
【Unity】どんな型でも簡単に保存と読み込みができるPlayerPrefsの関数を定義する
using UnityEngine;
public static class PlayerPrefsUtils
{
/// <summary>
/// 指定されたオブジェクトの情報を保存します
/// </summary>
public static void SetObject<T>( string key, T obj )
{
var json = JsonUtility.ToJson( obj );
PlayerPrefs.SetString( key, json );
}
/// <summary>
/// 指定されたオブジェクトの情報を読み込みます
/// </summary>
public static T GetObject<T>( string key )
{
var json = PlayerPrefs.GetString( key );
var obj = JsonUtility.FromJson<T>( json );
return obj;
}
}
-
var json = JsonUtility.ToJson( obj );
https://docs.unity3d.com/ja/current/ScriptReference/JsonUtility.ToJson.html
ここで渡すオブジェクトは、MonoBehaviour、ScriptableObject や Serializable 属性が適用されるプレーンなクラスか構造体である必要がある。
戻り値は、string形式のJSONオブジェクト。 -
PlayerPrefs.SetString( key, json );
したがってPlayerPrefsにstring形式で保存することができる。 -
var obj = JsonUtility.FromJson<T>( json );
https://docs.unity3d.com/ja/current/ScriptReference/JsonUtility.FromJson.html
JSONからオブジェクトを作成。
このオブジェクトのプロパティを変更して、改めて保存するという流れ。
const string KEY_SAVE_DATA = "KEY_SAVE_DATA";
Item item;
int step = 1;
[System.Serializable]
class Item {
public int count;
public string name;
public string[] colorList;
public Vector3 vector3;
}
void Start() {
item = new Item();
}
public void UpdateData() {
var _item = PlayerPrefsUtils.GetObject<Item>(KEY_SAVE_DATA);
item.count = _item.count + step;
Debug.Log("result.score : " + item.count);
Debug.Log("serialisedJson : " + JsonUtility.ToJson(item));
SaveData();
}
public void SaveData() {
PlayerPrefsUtils.SetObject(KEY_SAVE_DATA, item);
PlayerPrefs.Save();
}
これでUpdateDataを叩くたびにカウントが上がっていく。
エディタを停止してもデータは保存されているので、次回再生時は続きのカウントから始まる。