【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データが表示されます。
デシリアライズ(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の扱い方でした〜