Ejemplo n.º 1
0
        private void Sync(
            AssetLibraryInfo assetLibraryInfo,
            int parentPersistentID,
            int depth,
            GameObject go,
            Dictionary <UnityObject, PrefabPartInfo> objToParts,
            List <PrefabPartInfo> newPrefabs)
        {
            Component[] components = go.GetComponents <Component>();
            for (int i = 0; i < components.Length; ++i)
            {
                Component      component = components[i];
                PrefabPartInfo part;
                if (objToParts.TryGetValue(component, out part))
                {
                    newPrefabs.Add(part);
                }
                else
                {
                    part = new PrefabPartInfo
                    {
                        Depth              = depth,
                        Object             = component,
                        PersistentID       = assetLibraryInfo.Identity,
                        ParentPersistentID = parentPersistentID
                    };
                    assetLibraryInfo.Identity++;
                    newPrefabs.Add(part);
                }
            }

            foreach (Transform child in go.transform)
            {
                GameObject     childGo = child.gameObject;
                PrefabPartInfo part;
                if (objToParts.TryGetValue(childGo, out part))
                {
                    newPrefabs.Add(part);
                }
                else
                {
                    part = new PrefabPartInfo
                    {
                        Depth              = depth,
                        Object             = childGo,
                        PersistentID       = assetLibraryInfo.Identity,
                        ParentPersistentID = parentPersistentID
                    };
                    assetLibraryInfo.Identity++;
                    newPrefabs.Add(part);
                }

                Sync(assetLibraryInfo, part.PersistentID, depth + 1, childGo, objToParts, newPrefabs);
            }
        }
        public AssetLibraryInfo CloneVisible()
        {
            AssetLibraryInfo proxy = new AssetLibraryInfo();

            proxy.Identity       = Identity;
            proxy.FolderIdentity = FolderIdentity;
            proxy.name           = name;
            if (Folders == null)
            {
                return(proxy);
            }
            proxy.Folders = new List <AssetFolderInfo>();
            for (int i = 0; i < Folders.Count; ++i)
            {
                AssetFolderInfo folder  = Folders[i];
                bool            include = false;
                if (folder != null)
                {
                    if (folder.depth == -1)
                    {
                        include = true;
                    }
                    else
                    {
                        if (folder.IsEnabled)
                        {
                            AssetFolderInfo parent = (AssetFolderInfo)folder.parent;
                            if (parent != null)
                            {
                                if (parent.IsEnabled || parent.depth == -1)
                                {
                                    include = true;
                                }
                            }
                        }
                    }
                }

                if (include)
                {
                    AssetFolderInfo proxyFolder = new AssetFolderInfo();
                    proxyFolder.IsEnabled = true;
                    CopyFolder(folder, proxyFolder);
                    proxy.Folders.Add(proxyFolder);
                }
            }
            return(proxy);
        }
Ejemplo n.º 3
0
        private void MergeAssetLibrary(AssetLibraryReference asset, int ordinal)
        {
            if (!asset.KeepRuntimeProjectInSync)
            {
                return;
            }

            AssetLibraryInfo assetLibrary = asset.AssetLibrary;

            if (assetLibrary == null)
            {
                return;
            }

            assetLibrary.BuildTree();

            AssetFolderInfo rootFolder = assetLibrary.Folders.Where(folder => folder.depth == -1).First();

            MergeFolders(rootFolder, m_root, ordinal);
        }
        private void Awake()
        {
            if (m_assetLibrary == null || m_assetLibrary.Folders.Count == 0)
            {
                AssetFolderInfo assetsFolder = new AssetFolderInfo
                {
                    name  = "Assets",
                    depth = -1,
                };

                m_assetLibrary = new AssetLibraryInfo
                {
                    name    = "Root",
                    depth   = -1,
                    Folders = new List <AssetFolderInfo>
                    {
                        assetsFolder
                    }
                };
            }
        }
        private void SaveAsset()
        {
            AssetLibraryInfo assetLibrary     = Asset.AssetLibrary;
            string           assetLibraryPath = AssetDatabase.GetAssetPath(Asset);
            int    assetExtIndex = assetLibraryPath.LastIndexOf(".asset");
            string proxyPath     = assetLibraryPath.Remove(assetExtIndex) + "_Ref.asset";

            AssetLibraryReference reference = AssetDatabase.LoadAssetAtPath <AssetLibraryReference>(proxyPath);

            if (reference == null)
            {
                reference = CreateInstance <AssetLibraryReference>();
                AssetDatabase.CreateAsset(reference, proxyPath);
            }

            reference.AssetLibrary             = assetLibrary.CloneVisible();
            reference.AssetLibraryPath         = assetLibraryPath;
            reference.KeepRuntimeProjectInSync = Asset.KeepRuntimeProjectInSync;

            EditorUtility.SetDirty(reference);
            EditorUtility.SetDirty(Asset);
            AssetDatabase.SaveAssets();
        }
Ejemplo n.º 6
0
        public void Sync(AssetLibraryInfo assetLibraryInfo)
        {
            if (Object == null)
            {
                return;
            }

            GameObject go = Object as GameObject;

            if (go == null)
            {
                return;
            }

            List <PrefabPartInfo> newPrefabParts = new List <PrefabPartInfo>();

            Dictionary <UnityObject, PrefabPartInfo> objToParts = PrefabParts != null?
                                                                  PrefabParts.Where(part => part.Object != null).ToDictionary(part => part.Object) :
                                                                      new Dictionary <UnityObject, PrefabPartInfo>();

            Sync(assetLibraryInfo, -1, 0, go, objToParts, newPrefabParts);

            PrefabParts = newPrefabParts;
        }