コード例 #1
0
        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();
        }
コード例 #2
0
        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);
        }