コード例 #1
0
        private void TryInitialize(ProjectAssetContainer container)
        {
            if (m_initialized)
            {
                return;
            }

            foreach (Object comp in Components)
            {
                if (comp.ClassID == ClassIDType.OcclusionCullingSettings)
                {
                    OcclusionCullingSettings settings = (OcclusionCullingSettings)comp;
                    if (OcclusionCullingSettings.IsReadPVSData(File.Version))
                    {
                        if (settings.PVSData.Count > 0)
                        {
                            OcclusionCullingData = new OcclusionCullingData(container.VirtualFile);
                            OcclusionCullingData.Initialize(container, settings);
                        }
                    }
                }
            }

            m_initialized = true;
        }
コード例 #2
0
        public IExportCollection CreateCollection(Object asset)
        {
            if (OcclusionCullingSettings.IsCompatible(asset))
            {
                if (asset.File.IsScene)
                {
                    return(new SceneExportCollection(this, asset.File));
                }
                else
                {
                    return(new PrefabExportCollection(this, asset));
                }
            }
            else
            {
                switch (asset.ClassID)
                {
                case ClassIDType.NavMeshData:
                    return(new EmptyExportCollection());

                case ClassIDType.AnimatorController:
                    return(new AnimatorControllerExportCollection(this, asset));

                case ClassIDType.TagManager:
                    return(new ManagerExportCollection(this, asset));

                default:
                    return(new AssetExportCollection(this, asset));
                }
            }
        }
        public IExportCollection CreateCollection(VirtualSerializedFile virtualFile, Object asset)
        {
            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 AnimatorController
                        return(new EmptyExportCollection());
                    }
                }

                default:
                    return(new AssetExportCollection(this, asset));
                }
            }
        }
コード例 #4
0
        public IExportCollection CreateCollection(Object asset)
        {
            if (!asset.IsValid)
            {
                Logger.Instance.Log(LogType.Warning, LogCategory.Export, $"Can't export '{asset}' because it isn't valid");
                return(new EmptyExportCollection());
            }

            if (OcclusionCullingSettings.IsCompatible(asset))
            {
                if (asset.File.IsScene)
                {
                    return(new SceneExportCollection(this, asset.File));
                }
                else
                {
                    return(new PrefabExportCollection(this, asset));
                }
            }
            else
            {
                switch (asset.ClassID)
                {
                case ClassIDType.NavMeshData:
                    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;
                        }
                    }
                }
            }
        }
コード例 #6
0
        public SceneExportCollection(IAssetExporter assetExporter, 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.IsCompatible(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 = new EngineGUID(Guid.NewGuid());
                }
                else
                {
                    GUID = sceneSettings.SceneGUID;
                }
            }
            else
            {
                if (Config.IsGenerateGUIDByContent)
                {
                    GUID = ObjectUtils.CalculateObjectsGUID(Assets);
                }
                else
                {
                    GUID = new EngineGUID(Guid.NewGuid());
                }
            }
        }
コード例 #7
0
        public IExportCollection CreateCollection(VirtualSerializedFile virtualFile, Object asset)
        {
            if (OcclusionCullingSettings.IsCompatible(asset))
            {
                if (asset.File.Collection.IsScene(asset.File))
                {
                    return(new SceneExportCollection(this, virtualFile, asset.File));
                }
                else
                {
                    return(new PrefabExportCollection(this, virtualFile, asset));
                }
            }
            else
            {
                switch (asset.ClassID)
                {
                case ClassIDType.NavMeshData:
                    return(new EmptyExportCollection());

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

                default:
                    return(new AssetExportCollection(this, asset));
                }
            }
        }
コード例 #8
0
        private void TryInitialize(ProjectAssetContainer container)
        {
            if (m_initialized)
            {
                return;
            }

            foreach (Object comp in Components)
            {
                switch (comp.ClassID)
                {
                case ClassIDType.NavMeshSettings:
                {
                    NavMeshSettings settings = (NavMeshSettings)comp;
                    NavMeshData = settings.NavMeshData.FindObject(File);
                }
                break;

                case ClassIDType.OcclusionCullingSettings:
                {
                    OcclusionCullingSettings settings = (OcclusionCullingSettings)comp;
                    if (OcclusionCullingSettings.IsReadPVSData(File.Version))
                    {
                        if (settings.PVSData.Count > 0)
                        {
                            OcclusionCullingData = new OcclusionCullingData(container.VirtualFile);
                            OcclusionCullingData.Initialize(container, (byte[])settings.PVSData, settings.SceneGUID, settings.StaticRenderers, settings.Portals);
                        }
                    }
                }
                break;
                }
            }

            m_initialized = true;
        }
コード例 #9
0
        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;
                        }
                    }
                }
            }
        }
コード例 #10
0
        private static Object ReadAsset(AssetStream stream, AssetInfo assetInfo, long offset, int size)
        {
            Object asset;

            switch (assetInfo.ClassID)
            {
            case ClassIDType.GameObject:
                asset = new GameObject(assetInfo);
                break;

            case ClassIDType.Transform:
                asset = new Transform(assetInfo);
                break;

            case ClassIDType.Camera:
                asset = new Camera(assetInfo);
                break;

            case ClassIDType.Material:
                asset = new Material(assetInfo);
                break;

            case ClassIDType.MeshRenderer:
                asset = new MeshRenderer(assetInfo);
                break;

            case ClassIDType.Texture2D:
                asset = new Texture2D(assetInfo);
                break;

            case ClassIDType.SceneSettings:
                asset = new OcclusionCullingSettings(assetInfo);
                break;

            case ClassIDType.MeshFilter:
                asset = new MeshFilter(assetInfo);
                break;

            case ClassIDType.OcclusionPortal:
                asset = new OcclusionPortal(assetInfo);
                break;

            case ClassIDType.Mesh:
                asset = new Mesh(assetInfo);
                break;

            case ClassIDType.Shader:
                asset = new Shader(assetInfo);
                break;

            case ClassIDType.TextAsset:
                asset = new TextAsset(assetInfo);
                break;

            case ClassIDType.Rigidbody2D:
                asset = new Rigidbody2D(assetInfo);
                break;

            case ClassIDType.Rigidbody:
                asset = new Rigidbody(assetInfo);
                break;

            case ClassIDType.CircleCollider2D:
                asset = new CircleCollider2D(assetInfo);
                break;

            case ClassIDType.PolygonCollider2D:
                asset = new PolygonCollider2D(assetInfo);
                break;

            case ClassIDType.BoxCollider2D:
                asset = new BoxCollider2D(assetInfo);
                break;

            case ClassIDType.PhysicsMaterial2D:
                asset = new PhysicsMaterial2D(assetInfo);
                break;

            case ClassIDType.MeshCollider:
                asset = new MeshCollider(assetInfo);
                break;

            case ClassIDType.BoxCollider:
                asset = new BoxCollider(assetInfo);
                break;

            case ClassIDType.SpriteCollider2D:
                asset = new CompositeCollider2D(assetInfo);
                break;

            case ClassIDType.EdgeCollider2D:
                asset = new EdgeCollider2D(assetInfo);
                break;

            case ClassIDType.CapsuleCollider2D:
                asset = new CapsuleCollider2D(assetInfo);
                break;

            case ClassIDType.AnimationClip:
                asset = new AnimationClip(assetInfo);
                break;

            case ClassIDType.AudioListener:
                asset = new AudioListener(assetInfo);
                break;

            case ClassIDType.AudioSource:
                asset = new AudioSource(assetInfo);
                break;

            case ClassIDType.AudioClip:
                asset = new AudioClip(assetInfo);
                break;

            case ClassIDType.RenderTexture:
                asset = new RenderTexture(assetInfo);
                break;

            case ClassIDType.Cubemap:
                asset = new Cubemap(assetInfo);
                break;

            case ClassIDType.Avatar:
                asset = new Avatar(assetInfo);
                break;

            case ClassIDType.AnimatorController:
                asset = new AnimatorController(assetInfo);
                break;

            case ClassIDType.GUILayer:
                asset = new GUILayer(assetInfo);
                break;

            case ClassIDType.Animator:
                asset = new Animator(assetInfo);
                break;

            case ClassIDType.RenderSettings:
                asset = new RenderSettings(assetInfo);
                break;

            case ClassIDType.Light:
                asset = new Light(assetInfo);
                break;

            case ClassIDType.Animation:
                asset = new Animation(assetInfo);
                break;

            case ClassIDType.MonoScript:
                asset = new MonoScript(assetInfo);
                break;

            case ClassIDType.NewAnimationTrack:
                asset = new NewAnimationTrack(assetInfo);
                break;

            case ClassIDType.FlareLayer:
                asset = new FlareLayer(assetInfo);
                break;

            case ClassIDType.Font:
                asset = new Font(assetInfo);
                break;

            case ClassIDType.PhysicMaterial:
                asset = new PhysicMaterial(assetInfo);
                break;

            case ClassIDType.SphereCollider:
                asset = new SphereCollider(assetInfo);
                break;

            case ClassIDType.CapsuleCollider:
                asset = new CapsuleCollider(assetInfo);
                break;

            case ClassIDType.SkinnedMeshRenderer:
                asset = new SkinnedMeshRenderer(assetInfo);
                break;

            case ClassIDType.BuildSettings:
                asset = new BuildSettings(assetInfo);
                break;

            case ClassIDType.AssetBundle:
                asset = new AssetBundle(assetInfo);
                break;

            case ClassIDType.WheelCollider:
                asset = new WheelCollider(assetInfo);
                break;

            case ClassIDType.MovieTexture:
                asset = new MovieTexture(assetInfo);
                break;

            case ClassIDType.TerrainCollider:
                asset = new TerrainCollider(assetInfo);
                break;

            case ClassIDType.TerrainData:
                asset = new TerrainData(assetInfo);
                break;

            case ClassIDType.LightmapSettings:
                asset = new LightmapSettings(assetInfo);
                break;

            case ClassIDType.OcclusionArea:
                asset = new OcclusionArea(assetInfo);
                break;

            case ClassIDType.NavMeshSettings:
                asset = new NavMeshSettings(assetInfo);
                break;

            case ClassIDType.ParticleSystem:
                asset = new ParticleSystem(assetInfo);
                break;

            case ClassIDType.ParticleSystemRenderer:
                asset = new ParticleSystemRenderer(assetInfo);
                break;

            case ClassIDType.SpriteRenderer:
                asset = new SpriteRenderer(assetInfo);
                break;

            case ClassIDType.Sprite:
                asset = new Sprite(assetInfo);
                break;

            case ClassIDType.Terrain:
                asset = new Terrain(assetInfo);
                break;

            case ClassIDType.AnimatorOverrideController:
                asset = new AnimatorOverrideController(assetInfo);
                break;

            case ClassIDType.CanvasRenderer:
                asset = new CanvasRenderer(assetInfo);
                break;

            case ClassIDType.Canvas:
                asset = new Canvas(assetInfo);
                break;

            case ClassIDType.RectTransform:
                asset = new RectTransform(assetInfo);
                break;

            case ClassIDType.NavMeshData:
                asset = new NavMeshData(assetInfo);
                break;

            case ClassIDType.OcclusionCullingData:
                asset = new OcclusionCullingData(assetInfo);
                break;

            case ClassIDType.SceneAsset:
                asset = new SceneAsset(assetInfo);
                break;

            case ClassIDType.LightmapParameters:
                asset = new LightmapParameters(assetInfo);
                break;

            case ClassIDType.SpriteAtlas:
                asset = new SpriteAtlas(assetInfo);
                break;

            default:
                return(null);
            }

            stream.BaseStream.Position = offset;
            if (Config.IsGenerateGUIDByContent)
            {
                byte[] data = stream.ReadBytes(size);
                asset.Read(data);

                using (MD5 md5 = MD5.Create())
                {
                    byte[] md5Hash = md5.ComputeHash(data);
                    assetInfo.GUID = new UtinyGUID(md5Hash);
                }
            }
            else
            {
                stream.AlignPosition = offset;
                asset.Read(stream);
                long read = stream.BaseStream.Position - offset;
                if (read != size)
                {
                    throw new Exception($"Read {read} but expected {size} for object {asset.GetType().Name}");
                }
            }
            return(asset);
        }