示例#1
0
        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);
                }
            }
        }
示例#2
0
        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;
        }
示例#3
0
        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);
                    }
                }
            }
        }