public void Export() { string path = UnityEditor.EditorUtility.SaveFilePanelInProject("Save Visual Scripting", "VisualScript", "asset", "Create Visual Scripting Asset"); Object backupFile = null; if (!string.IsNullOrEmpty(path)) { //Check if assets is exists if (AssetDatabase.LoadAssetAtPath(path, typeof(DIVisualComponent)) != null) { //I want to rename the file, but I need to check if the target rename file doesn't exist. I need to loop check for it int iterationCandidate = 1; string pathCandidate = path; pathCandidate = pathCandidate.Insert(pathCandidate.Length - 6, iterationCandidate.ToString()); while (AssetDatabase.LoadAssetAtPath(pathCandidate, typeof(Object)) != null) { iterationCandidate += 1; pathCandidate = pathCandidate.Insert(pathCandidate.Length - 6, iterationCandidate.ToString()); } //Backup First, by changing the name AssetDatabase.RenameAsset(path, AssetDatabase.LoadAssetAtPath(path, typeof(DIVisualComponent)).name + iterationCandidate.ToString()); backupFile = AssetDatabase.LoadAssetAtPath(pathCandidate, typeof(DIVisualComponent)); UnityEditor.AssetDatabase.SaveAssets(); UnityEditor.AssetDatabase.Refresh(); } DIRootComponent result = Instantiate(this); result.name = name; UnityEditor.AssetDatabase.CreateAsset(result, path); /* * if (!DIVisualScriptingData.replaceActAsAppend) * { * UnityEditor.AssetDatabase.DeleteAsset(path); * UnityEditor.AssetDatabase.SaveAssets(); * UnityEditor.AssetDatabase.Refresh(); * UnityEditor.AssetDatabase.CreateAsset(result, path); * } * else * UnityEditor.AssetDatabase.AddObjectToAsset(result, path);*/ result.next = next; if (next != null) { next.SaveComponent(result, result); } } //Delete backup file if (backupFile != null) { Debug.Log(AssetDatabase.DeleteAsset(AssetDatabase.GetAssetPath(backupFile))); } UnityEditor.AssetDatabase.SaveAssets(); UnityEditor.AssetDatabase.Refresh(); }
public DIRootComponent DuplicateAndSaveToScene() { DIRootComponent result = Instantiate(this); result.name = name; result.next = next; result.position = position; next.SaveComponent(null, result); if (UnityEditor.PrefabUtility.GetPrefabObject(DIVisualScriptingData.inspectTarget.getMono.gameObject) != null) { //DO NOTHING //UnityEditor.PrefabUtility.DisconnectPrefabInstance(DIVisualScriptingData.inspectTarget.getMono.gameObject); UnityEditor.PrefabUtility.RecordPrefabInstancePropertyModifications(DIVisualScriptingData.inspectTarget.getMono.gameObject); } return(result); }