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