// Detect if people have rebaked their lighting and clear the data if they have. public void OnBeforeSerialize() { Renderer[] renderers = GetComponentsInChildren <Renderer>(true); if (renderers.Length != rendererLightmapData.Length) { isSaved = false; EditorSceneManager.MarkSceneDirty(gameObject.scene); return; } for (int i = 0; i < renderers.Length; ++i) { Renderer currentRenderer = renderers[i]; RendererLightmapData currentData = rendererLightmapData[i]; if (currentRenderer != currentData.renderer) { isSaved = false; EditorSceneManager.MarkSceneDirty(gameObject.scene); return; } if (currentRenderer.lightmapIndex != currentData.lightmapIndex || currentRenderer.lightmapScaleOffset != currentData.lightmapScaleOffset //currentRenderer.realtimeLightmapIndex != currentData.realtimeLightmapIndex || //currentRenderer.realtimeLightmapScaleOffset != currentRenderer.realtimeLightmapScaleOffset ) { isSaved = false; EditorSceneManager.MarkSceneDirty(gameObject.scene); return; } } }
public void BuildLightmapStorage() { LightmapData[] lightmaps = LightmapSettings.lightmaps; LightmapStorageData[] storedLightmaps = new LightmapStorageData[lightmaps.Length]; for (int i = 0; i < lightmaps.Length; ++i) { LightmapData currentLightmap = lightmaps[i]; storedLightmaps[i] = new LightmapStorageData() { lightmap = currentLightmap.lightmapColor, lightmapDir = currentLightmap.lightmapDir, shadowmask = currentLightmap.shadowMask }; } this.lightmaps = storedLightmaps; Renderer[] renderers = GetComponentsInChildren <Renderer>(true); RendererLightmapData[] rendererData = new RendererLightmapData[renderers.Length]; for (int i = 0; i < renderers.Length; ++i) { rendererData[i] = new RendererLightmapData() { renderer = renderers[i], lightmapIndex = renderers[i].lightmapIndex, lightmapScaleOffset = renderers[i].lightmapScaleOffset, //realtimeLightmapIndex = renderers[i].realtimeLightmapIndex, //realtimeLightmapScaleOffset = renderers[i].realtimeLightmapScaleOffset }; } this.rendererLightmapData = rendererData; isSaved = true; }