
我们知道对于结构复杂嵌套很深的数据结构比如一个任务的多种任务效果、发布事件、写入NPC对话用Excel做配表很难。ScriptableObject SO由于能快速根据脚本生成检查器面板成为了编辑深嵌套NoSQL型数据的理想编辑器。这里我们并不用SO长期储存数据我的原因是修改SO的字段名或结构后原来的数据会丢失此时我们需要json这种可读文件恢复丢失的数据。using System; using System.IO; using System.Collections.Generic; using UnityEngine; using Newtonsoft.Json; #if UNITY_EDITOR using UnityEditor; #endif namespace Mercenaria { [CreateAssetMenu(menuName Custom/任务编辑器SO)] public class MissionConfigSO : ScriptableObject { [Header(填Assets下的路径)] public string jsonPath; public ListMissionConfig missionConfigs new(); #if UNITY_EDITOR [ContextMenu(导出json)] void ToJson() { string tempPath jsonPath.Replace(/Assets, ); string path Path.Combine(Application.dataPath, tempPath); Dictionarystring, MissionConfig dic new(); foreach(var config in missionConfigs) { dic[config.Id] config; } string jsonJsonConvert.SerializeObject(dic); File.WriteAllText(path, json); AssetDatabase.Refresh(); } Dictionarystring, MissionConfig GetDic() { string json AssetDatabase.LoadAssetAtPathTextAsset(jsonPath).text; var dic JsonConvert.DeserializeObjectDictionarystring, MissionConfig(json); return dic; } [ContextMenu(导入json)] void FromJson() { var dic GetDic(); missionConfigs.Clear(); foreach(var config in dic.Values) { missionConfigs.Add(config); } } [ContextMenu(追加导入json)] void AppendFromJson() { var dic GetDic(); missionConfigs.Clear(); foreach (var config in dic.Values) { missionConfigs.Add(config); } } #endif } }