LoginSignup
13
10

More than 5 years have passed since last update.

データをJSON形式でPlayerPrefsに保存する

Posted at

Utilクラスはこちらを拝借
【Unity】どんな型でも簡単に保存と読み込みができるPlayerPrefsの関数を定義する

PlayerPrefsUtils.cs
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;
    }
}
  1. var json = JsonUtility.ToJson( obj );
    https://docs.unity3d.com/ja/current/ScriptReference/JsonUtility.ToJson.html
    ここで渡すオブジェクトは、MonoBehaviour、ScriptableObject や Serializable 属性が適用されるプレーンなクラスか構造体である必要がある。
    戻り値は、string形式のJSONオブジェクト。

  2. PlayerPrefs.SetString( key, json );
    したがってPlayerPrefsにstring形式で保存することができる。

  3. 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を叩くたびにカウントが上がっていく。
エディタを停止してもデータは保存されているので、次回再生時は続きのカウントから始まる。

13
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
10