Exemplo 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];
                if (component == null)
                {
                    continue;
                }
                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);
            }
        }
Exemplo n.º 2
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;
        }