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