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