diff --git a/Assets/02.InformationSave/RunTime/Abstract/AbstractInformation.cs b/Assets/02.InformationSave/RunTime/Abstract/AbstractInformation.cs index d11c450..3a96d8e 100644 --- a/Assets/02.InformationSave/RunTime/Abstract/AbstractInformation.cs +++ b/Assets/02.InformationSave/RunTime/Abstract/AbstractInformation.cs @@ -17,7 +17,7 @@ namespace Stary.Evo.InformationSave /// /// 配置文件存储路径 /// - string path = "Assets/02.InformationSave/RunTime/Data/ScriptObjectSaveData.asset"; + string path = "InformationSaveData/ScriptObjectSaveData"; public virtual void Add() { @@ -51,6 +51,7 @@ namespace Stary.Evo.InformationSave int index = _list.FindIndex(n => n.desc == desc); if (index != -1) Switch(index); } + #region Editor #if UNITY_EDITOR @@ -58,8 +59,8 @@ namespace Stary.Evo.InformationSave public void UpdateInformation() { String sceneNmae = gameObject.scene.name; - ScriptObjectSave scriptObjectSaveData = AssetDatabase.LoadAssetAtPath(path); - if(scriptObjectSaveData == null) + ScriptObjectSave scriptObjectSaveData = Resources.Load(path); + if (scriptObjectSaveData == null) { Debug.LogError("ScriptObjectSaveData配置文件丢失"); return; @@ -84,41 +85,39 @@ namespace Stary.Evo.InformationSave { String sceneNmae = gameObject.scene.name; // 加载 ScriptObjectSaveData - ScriptObjectSave scriptObjectSaveData = AssetDatabase.LoadAssetAtPath(path); - if(scriptObjectSaveData != null) + ScriptObjectSave scriptObjectSaveData = Resources.Load(path); + if(scriptObjectSaveData == null) { - if(scriptObjectSaveData.dic == null) + scriptObjectSaveData = CheckAndCreateFoldersAndAsset(); + Debug.Log("创建了ScriptObjectSaveData文件"); + } + + if (scriptObjectSaveData.dic == null) + { + Debug.LogError("ScriptObjectSaveData的dic为空"); + return false; + } + + // 检查是否已经存在相同的键 + if (scriptObjectSaveData.dic.ContainsKey(sceneNmae + gameObject.name)) + { + // 如果存在,选择是否替换原有的 List + if (UnityEditor.EditorUtility.DisplayDialog("提示", "数据集下已有相同名称的物体数据\n是否覆盖更新!!!\n" + "场景名:" + sceneNmae + "\n物体名:" + gameObject.name, "确定", "取消")) { - Debug.LogError("ScriptObjectSaveData的dic为空"); - return false; - } - // 检查是否已经存在相同的键 - if (scriptObjectSaveData.dic.ContainsKey(sceneNmae + gameObject.name)) - { - // 如果存在,选择是否替换原有的 List - if(UnityEditor.EditorUtility.DisplayDialog("提示", "数据集下已有相同名称的物体数据\n是否覆盖更新!!!\n"+ "场景名:"+ sceneNmae + "\n物体名:"+gameObject.name, "确定", "取消")) - { - scriptObjectSaveData.dic[sceneNmae + gameObject.name] = new List(_list); - } - else - { - return false; - } - + scriptObjectSaveData.dic[sceneNmae + gameObject.name] = new List(_list); } else { - // 如果不存在,添加新的键值对 - scriptObjectSaveData.dic.Add(sceneNmae + gameObject.name, new List(_list)); + return false; } - AssetDatabase.SaveAssets(); - AssetDatabase.Refresh(); } else { - Debug.LogError("ScriptObjectSaveData配置文件丢失"); - return false; + // 如果不存在,添加新的键值对 + scriptObjectSaveData.dic.Add(sceneNmae + gameObject.name, new List(_list)); } + AssetDatabase.SaveAssets(); + AssetDatabase.Refresh(); return true; } @@ -126,10 +125,35 @@ namespace Stary.Evo.InformationSave return false; } + private ScriptObjectSave CheckAndCreateFoldersAndAsset() + { + string ResourcesFolderName = "Resources"; + string InformationSaveDataFolderName = "InformationSaveData"; + string ScriptObjectSaveDataFileName = "ScriptObjectSaveData"; + ScriptObjectSave scriptableObject; - //private int guidIndex; + // 判断是否创建Resources文件夹 + string resourcesPath = Path.Combine(Application.dataPath, ResourcesFolderName); + if (!Directory.Exists(resourcesPath)) + { + Directory.CreateDirectory(resourcesPath); + } - //private List strings = new List(); + // 判断是否创建InformationSaveData文件夹 + string informationSaveDataPath = Path.Combine(resourcesPath, InformationSaveDataFolderName); + if (!Directory.Exists(informationSaveDataPath)) + { + Directory.CreateDirectory(informationSaveDataPath); + } + + // 创建ScriptObjectSaveData.asset文件 + scriptableObject = ScriptableObject.CreateInstance(); + AssetDatabase.CreateAsset(scriptableObject, "Assets/" + ResourcesFolderName + "/" + InformationSaveDataFolderName + "/" + ScriptObjectSaveDataFileName + ".asset"); + AssetDatabase.SaveAssets(); + AssetDatabase.Refresh(); + + return scriptableObject; + } //绘制 public override void Draw()