いんでぃーづ

ゲームいろいろ、いろいろ自由

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();

イジョ!


“Unity” and Unity logos are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere, and are used under license.


免責事項

当サイトの広告バナー、リンクによって提供される情報、サービス内容について、当サイトは一切の責任を負いません。

また、当サイトの情報を元にユーザ様が不利益を被った場合にも、当サイトは一切の責任を負いません。

すべて自己責任でお願いします。