public static bool CreatePrefab(string prefabID, SceneGameObject root, string name = "", int sprite = 0, ObjectCategory category = ObjectCategory.UserPrefabs)
        {
            if (string.IsNullOrEmpty(prefabID))
            {
                return(false);
            }

            string prefabFolder = exportPath + "/";

            if (!Directory.Exists(exportPath))
            {
                Directory.CreateDirectory(prefabFolder);
            }

            SavedPrefab savedPrefab = new SavedPrefab {
                name          = name,
                category      = category,
                sprite        = sprite,
                root          = root.data.id,
                prefabObjects = new List <SceneGameObject>(root.GetComponentsInChildren <SceneGameObject>(true))
            };

            byte[] exportData = SerializationUtility.SerializeValue(savedPrefab, dataFormat);

            File.WriteAllBytes(exportPath + "/" + prefabID + ".nt", exportData);

            return(true);
        }
    public void RemoveSceneGameObject(string key)
    {
        if (sceneGameObjects.ContainsKey(key))
        {
            SceneGameObject toRemove = sceneGameObjects[key];
            sceneGameObjects.Remove(key);

            if (toRemove.data.graph != null)
            {
                showingGraph = sceneGraph;
            }

            if (!string.IsNullOrEmpty(toRemove.data.parent))
            {
                SceneGameObject toRemoveParent = sceneGameObjects[toRemove.data.parent];
                toRemoveParent.data.childs.Remove(key);

                Debug.Log("Removed from parent!");
            }

            List <SceneGameObject> childsToRemove = new List <SceneGameObject>(toRemove.GetComponentsInChildren <SceneGameObject>());

            foreach (SceneGameObject childToRemove in childsToRemove)
            {
                string childKey = childToRemove.data.id;
                sceneGameObjects.Remove(childKey);
            }

            Destroy(toRemove.gameObject);
            OnSceneGameObjectsChanged.Invoke();
            OnGraphListChanged.Invoke();
        }
    }