Unity(C#)初心者・入門者向けチュートリアル ひよこのたまご

AndroidやiOS向けアプリを簡単に作れるゲーム開発環境Unity(ユニティ)の使い方を、チュートリアル方式で一緒に学びましょう!

【Unity】JsonUtilityを使ってデータを保存してみる

Unity 2019.2.0f1 Personal(2019年8月)
UnityではJsonUtilityというAPIを使い、
Json(データフォーマット)を扱うことが出来ます。
クラスなどデータのまとまりからJsonテキストへ変換(シリアライズ)したり、
逆にJsonテキストからクラスへ変換(デシリアライズ)したりできます。

シリアライズ(JsonUtility.ToJson)

JsonUtilityのToJsonメソッドでクラス→Jsonへ変換できます。

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public  class SaveDataManager: MonoBehaviour
{

    void Start()
    {
        var saveData = new SaveData();
        string toData = JsonUtility.ToJson(saveData);
        Debug.Log(toData);
    }
}


[Serializable]
class SaveData
{
    public int id;
    public string name;

    public SaveData()
    {
        id = 1;
        name = "名無し";
    }
}

SaveDataManager.cs

SaveDataクラスをインスタンス化し、
JsonUtility.ToJsonメソッドを通すだけでJson形式の文字列に変換されます。

シリアライズするSaveDataクラスには[Serializable]属性をつけて下さい。
またシリアライズ・デシリアライズする対象データの変数属性は
publicか[Serialize Field]である必要があります。

適当なオブジェクトにSaveDataManagerをつけて実行するとConsoleにJsonデータが表示されます。
f:id:hiyotama:20190828080645p:plain

デシリアライズ(JsonUtility.FromJson)

続いてシリアライズしたJsonデータを
JsonUtility.FromJsonメソッドでデシリアライズしクラスに戻します。

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public  class SaveDataManager: MonoBehaviour
{

    void Start()
    {
        var saveData = new SaveData();
        string toData = JsonUtility.ToJson(saveData);
        Debug.Log(toData);
// ***** 開始 *****
        var fromData = JsonUtility.FromJson<SaveData>(toData);
        Debug.Log(fromData.id + ":" + fromData.name);
// ***** 終了 *****
    }
}


[Serializable]
class SaveData
{
    public int id;
    public string name;

    public SaveData()
    {
        id = 1;
        name = "名無し";
    }
}

SaveDataManager.cs

JsonUtility.FromJsonメソッドはジェネリクス()でクラスを指定する必要があります。
今回の場合だとを指定しています。
SaveDataに含まれない値がJsonに含まれる場合、その値は無視されます。

以上、JsonUtilityの扱い方でした〜