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); } }
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; }