private void PersistentDescriptorsToPrefabPartItems(PersistentDescriptor[] descriptors, List <PrefabPart> prefabParts) { if (descriptors == null) { return; } for (int i = 0; i < descriptors.Length; ++i) { PersistentDescriptor descriptor = descriptors[i]; if (descriptor != null) { Type persistentType = m_typeMap.ToType(descriptor.PersistentTypeGuid); if (persistentType == null) { Debug.LogWarningFormat("Unable to resolve type with guid {0}", descriptor.PersistentTypeGuid); continue; } Type type = m_typeMap.ToUnityType(persistentType); if (type == null) { Debug.LogWarningFormat("Unable to get unity type from persistent type {1}", type.FullName); continue; } Guid typeGuid = m_typeMap.ToGuid(type); if (typeGuid == Guid.Empty) { Debug.LogWarningFormat("Unable convert type {0} to guid", type.FullName); continue; } PrefabPart prefabPartItem = new PrefabPart { Name = descriptor.Name, ParentID = descriptor.Parent != null ? descriptor.Parent.PersistentID : m_assetDB.NullID, PartID = descriptor.PersistentID, TypeGuid = typeGuid }; prefabParts.Add(prefabPartItem); PersistentDescriptorsToPrefabPartItems(descriptor.Children, prefabParts); PersistentDescriptorsToPrefabPartItems(descriptor.Components, prefabParts); } } }
private void OnGetProjectTreeCompleted(Error error, ProjectItem rootFolder, ProjectAsyncOperation ao, ProjectEventHandler callback) { m_root = rootFolder; /* * for (int i = 0; i < m_staticReferences.Length; ++i) * { * AssetLibraryAsset assetLibrary = m_staticReferences[i]; * if (assetLibrary == null) * { * continue; * } * assetLibrary.Ordinal = i; * m_assetDB.AddLibrary(assetLibrary, i); * * CleanupTree(m_root, i); * MergeAssetLibrary(assetLibrary, i); * } */ AssetItem[] assetItems = m_root.Flatten(true).OfType <AssetItem>().ToArray(); m_idToAssetItem = assetItems.ToDictionary(item => item.ItemID); for (int i = 0; i < assetItems.Length; ++i) { AssetItem assetItem = assetItems[i]; if (assetItem.Parts != null) { for (int j = 0; j < assetItem.Parts.Length; ++j) { PrefabPart prefabPart = assetItem.Parts[j]; if (prefabPart != null) { m_idToAssetItem.Add(prefabPart.PartID, assetItem); } } } } if (callback != null) { callback(error); } ao.Error = error; ao.IsCompleted = true; }
private void BuildTree(ProjectItem projectItem, AssetFolderInfo folder, int ordinal) { projectItem.Name = folder.name; if (folder.hasChildren) { projectItem.Children = new List <ProjectItem>(); for (int i = 0; i < folder.children.Count; ++i) { ProjectItem child = new ProjectItem(); projectItem.AddChild(child); BuildTree(child, (AssetFolderInfo)folder.children[i], ordinal); } } if (folder.Assets != null && folder.Assets.Count > 0) { if (projectItem.Children == null) { projectItem.Children = new List <ProjectItem>(); } List <string> existingNames = new List <string>(); for (int i = 0; i < folder.Assets.Count; ++i) { AssetInfo assetInfo = folder.Assets[i]; if (assetInfo.Object != null) { string ext = GetExt(assetInfo.Object); ImportItem importItem = new ImportItem { Name = PathHelper.GetUniqueName(assetInfo.name, ext, existingNames), Ext = ext, Object = assetInfo.Object, TypeGuid = m_typeMap.ToGuid(assetInfo.Object.GetType()), ItemID = m_assetDB.ToStaticResourceID(ordinal, assetInfo.PersistentID) }; if (assetInfo.PrefabParts != null) { List <PrefabPart> parts = new List <PrefabPart>(); for (int j = 0; j < assetInfo.PrefabParts.Count; ++j) { PrefabPartInfo partInfo = assetInfo.PrefabParts[j]; if (partInfo.Object != null) { PrefabPart part = new PrefabPart { Name = partInfo.Object.name, PartID = m_assetDB.ToStaticResourceID(ordinal, partInfo.PersistentID), ParentID = m_assetDB.ToStaticResourceID(ordinal, partInfo.PersistentID), TypeGuid = m_typeMap.ToGuid(partInfo.Object.GetType()), }; parts.Add(part); } } importItem.Parts = parts.ToArray(); } projectItem.AddChild(importItem); existingNames.Add(importItem.NameExt); } } } }