まあ、ごくたまになんですけど、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();
イジョ!