いんでぃーづ

個人でゲーム開発してる上で吸収したモノたち紹介。UnityからGIMPまでなんでも。デザインとかゲーム論まで語っちゃうよ的なアレ。

MENU

Unity : MonoBehaviour, ScriptableObject をJSONファイルに保存する [C#]

{スポンサーリンク}
{スポンサーリンク}

まあ、ごくたまになんですけど、Unityをバージョナップしたりアセットをインポートしなおしたときに、シリアライズされたデータがふっとぶ時があったんです。
けっこうショックがデカいんですよね。いろんなデータをそこに入れてたりすると。

こんなときバックアップをファイルに保存しておけば復元できます。


保存

JsonUtilityでJSONテキストにしたモノをファイルに書き込み、AssetDatabaseでインポートします。
下記ソースの TestScriptableObject クラスは、保存したいScriptableObjectクラス。

string json = JsonUtility.ToJson (AssetDatabase.LoadAssetAtPath<TestScriptableObject>("ScriptableObjectアセットのファイルパス"));

using (StreamWriter writer = new StreamWriter("書き出すファイルのパス"))
{
       writer.Write(json.ToString());
}

AssetDatabase.ImportAsset(jsonPath);

復元

JSONからMonoBehaviour, ScriptableObjectにデータを流し込む場合は、JsonUtility.FromJsonOverwrite メソッドを使用する必要があります。

var so = AssetDatabase.LoadAssetAtPath<TestScriptableObject>("ScriptableObjectアセットのファイルパス");
TextAsset backupJson = AssetDatabase.LoadAssetAtPath<TextAsset>("JSONファイルのパス");
JsonUtility.FromJsonOverwrite(backupJson.text, so);

AssetDatabase.SaveAssets();

イジョ!

Amazon.co.jpアソシエイト