Example #1
0
        public IExportCollection CreateCollection(VirtualSerializedFile virtualFile, Object asset, List <Object> depList)
        {
            if (OcclusionCullingSettings.IsSceneCompatible(asset))
            {
                if (asset.File.Collection.IsScene(asset.File))
                {
                    return(new SceneExportCollection(this, virtualFile, asset.File));
                }
                else if (PrefabExportCollection.IsValidAsset(asset))
                {
                    return(new PrefabExportCollection(this, virtualFile, asset));
                }
                else
                {
                    return(new FailExportCollection(this, asset));
                }
            }
            else
            {
                switch (asset.ClassID)
                {
                case ClassIDType.AnimatorController:
                    return(new AnimatorControllerExportCollection(this, virtualFile, asset));

                case ClassIDType.TimeManager:
                case ClassIDType.AudioManager:
                case ClassIDType.InputManager:
                case ClassIDType.Physics2DSettings:
                case ClassIDType.GraphicsSettings:
                case ClassIDType.QualitySettings:
                case ClassIDType.PhysicsManager:
                case ClassIDType.TagManager:
                case ClassIDType.NavMeshProjectSettings:
                case ClassIDType.NetworkManager:
                case ClassIDType.ClusterInputManager:
                case ClassIDType.UnityConnectSettings:
                    return(new ManagerExportCollection(this, asset));

                case ClassIDType.BuildSettings:
                    return(new BuildSettingsExportCollection(this, virtualFile, asset));

                case ClassIDType.MonoBehaviour:
                {
                    MonoBehaviour monoBehaviour = (MonoBehaviour)asset;
                    if (monoBehaviour.IsScriptableObject)
                    {
                        return(new AssetExportCollection(this, asset));
                    }
                    else
                    {
                        // such MonoBehaviours as StateMachineBehaviour in AimatorController
                        return(new EmptyExportCollection());
                    }
                }

                default:
                    return(new AssetExportCollection(this, asset));
                }
            }
        }
        public SceneExportCollection(IAssetExporter assetExporter, VirtualSerializedFile virtualFile, ISerializedFile file)
        {
            if (assetExporter == null)
            {
                throw new ArgumentNullException(nameof(assetExporter));
            }
            if (file == null)
            {
                throw new ArgumentNullException(nameof(file));
            }

            AssetExporter = assetExporter;
            Name          = file.Name;
            m_file        = file;

            List <Object> components = new List <Object>();

            foreach (Object asset in file.FetchAssets())
            {
                if (OcclusionCullingSettings.IsSceneCompatible(asset))
                {
                    components.Add(asset);
                    m_cexportIDs.Add(asset.AssetInfo, asset.PathID);
                }
            }
            m_components = components.OrderBy(t => t, this).ToArray();

            if (OcclusionCullingSettings.HasSceneGUID(file.Version))
            {
                OcclusionCullingSettings sceneSettings = Components.Where(t => t.ClassID == ClassIDType.OcclusionCullingSettings).Select(t => (OcclusionCullingSettings)t).FirstOrDefault();
                if (sceneSettings != null)
                {
                    GUID = sceneSettings.SceneGUID;
                }
            }
            if (GUID.IsZero)
            {
                GUID = new UnityGUID(Guid.NewGuid());
            }

            if (OcclusionCullingSettings.HasReadPVSData(File.Version))
            {
                foreach (Object comp in Components)
                {
                    if (comp.ClassID == ClassIDType.OcclusionCullingSettings)
                    {
                        OcclusionCullingSettings settings = (OcclusionCullingSettings)comp;
                        if (settings.PVSData.Length > 0)
                        {
                            m_occlusionCullingSettings = settings;
                            OcclusionCullingData       = OcclusionCullingData.CreateVirtualInstance(virtualFile);
                            break;
                        }
                    }
                }
            }
        }
        public SceneExportCollection(IAssetExporter assetExporter, VirtualSerializedFile virtualFile, ISerializedFile file)
        {
            if (assetExporter == null)
            {
                throw new ArgumentNullException(nameof(assetExporter));
            }
            if (file == null)
            {
                throw new ArgumentNullException(nameof(file));
            }

            AssetExporter = assetExporter;
            Name          = file.Name;
            m_file        = file;

            foreach (Object asset in file.FetchAssets())
            {
                if (OcclusionCullingSettings.IsSceneCompatible(asset))
                {
                    AddComponent(file, asset);
                }
            }
            m_cexportIDs = m_cexportIDs.OrderBy(t => t.Key, this).ToDictionary(t => t.Key, t => t.Value);

            if (OcclusionCullingSettings.IsReadSceneGUID(file.Version))
            {
                OcclusionCullingSettings sceneSettings = Components.Where(t => t.ClassID == ClassIDType.OcclusionCullingSettings).Select(t => (OcclusionCullingSettings)t).FirstOrDefault();
                if (sceneSettings != null)
                {
                    GUID = sceneSettings.SceneGUID;
                }
            }
            if (GUID.IsZero)
            {
                if (Config.IsGenerateGUIDByContent)
                {
                    GUID = ObjectUtils.CalculateAssetsGUID(Assets);
                }
                else
                {
                    GUID = new EngineGUID(Guid.NewGuid());
                }
            }

            if (OcclusionCullingSettings.IsReadPVSData(File.Version))
            {
                foreach (Object comp in Components)
                {
                    if (comp.ClassID == ClassIDType.OcclusionCullingSettings)
                    {
                        OcclusionCullingSettings settings = (OcclusionCullingSettings)comp;
                        if (settings.PVSData.Count > 0)
                        {
                            m_occlusionCullingSettings = settings;
                            OcclusionCullingData       = OcclusionCullingData.CreateVirtualInstance(virtualFile, settings);
                            break;
                        }
                    }
                }
            }
        }