- Home /
Can't Re-Enable Lightmaps after Disabling Them at Runtime
I'm trying to disable and re-enable my scene's lightmaps at runtime, but the script I'm using (obtained from here) is only half working.
 using UnityEngine;
 using System.Collections;
 
 public class UseLightmap : MonoBehaviour {
 
     // Use this for initialization
     void Start () {
     
     }
     
     // Update is called once per frame
     void Update () {
     
         if (Input.GetKeyDown("up"))
         {
             Change(1);
         }
 
         if (Input.GetKeyDown("down"))
         {
             Change(0);
         }
     }
 
     void Change (int i) {
 
         // Save reference to existing scene lightmap data.
         LightmapData[] lightmap_data = LightmapSettings.lightmaps;
 
         if (i == 0)
         {
             // Disable lightmaps in scene by removing the lightmap data references
             LightmapSettings.lightmaps = new LightmapData[]{};
         }
 
         if (i == 1)
         {
             // Reenable lightmap data in scene.
             LightmapSettings.lightmaps = lightmap_data;
         }
     }
 }
In this script I'm using the up and down arrow keys to test the on/off functions. The problem is that while I can successfully turn the lightmaps off, I can't turn them back on. I suspected that the functions might be incorrectly placed, but I couldn't seem to figure out what the correct placement would be.
I mostly use JS and am not very experienced with C#, so this might not be an ideal setup I have here. I suspect the problem is something simple that I'm just overlooking, but I've run into a dead end. Arrays have never been my strong point.
If someone could help me figure out what I'm doing wrong, that would be wonderful!
Answer by Jessespike · Feb 19, 2015 at 09:52 PM
You're clearing the LightmapSettings and storing it with blank lightmap data, so it will be blank when you re-enable it. Basically you just need to move that line where you store the existing lightmap.
 public class UseLightmap : MonoBehaviour {
     
     LightmapData[] lightmap_data;
 
     // Use this for initialization
     void Start () {
         // Save reference to existing scene lightmap data.
         lightmap_data = LightmapSettings.lightmaps;
     }
 
     // Update is called once per frame
     void Update () {
         if (Input.GetKeyDown("up"))
         {
             Change(1);
         }
         if (Input.GetKeyDown("down"))
         {
             Change(0);
         }
     }
 
     void Change (int i) {
         if (i == 0)
         {
             // Disable lightmaps in scene by removing the lightmap data references
             LightmapSettings.lightmaps = new LightmapData[]{};
         }
         if (i == 1)
         {
             // Reenable lightmap data in scene.
             LightmapSettings.lightmaps = lightmap_data;
         }
     }
 }
Ah, I thought it might be something like that. I guess I was pretty close with one of my attempts. It works great now, thanks!
I can confirm that this works in Unity 5.3.5 , wonderful :)
Your answer
 
 
              koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                