본문 바로가기
Unity3D/Unity & C#

Unity & C# ~ Lightmap 교체

by 캬캬백곰 2025. 3. 19.
728x90
public float powerOutageDuration = 3f;

// 직렬화
[Serializable]
public class LightMapClone
{
    public Texture2D _dir;
    public Texture2D _light;
    public Texture2D _shadow;
}

public LightMapClone[] _lightmaps;
private LightmapData[] savedLightMaps;

private void Update()
{
    if (Input.GetKeyDown(KeyCode.Escape)) 
    {
        StartCoroutine(SimulatePowerOutage());
    }
}

private IEnumerator SimulatePowerOutage()
{
    LightmapData[] lightmapData = new LightmapData[_lightmaps.Length];

    for(int i=0; i < _lightmaps.Length; i++)
    {
        lightmapData[i] = new LightmapData();
        lightmapData[i].lightmapDir 	= _lightmaps[i]._dir;
        lightmapData[i].lightmapColor 	= _lightmaps[i]._light;
        lightmapData[i].shadowMask 		= _lightmaps[i]._shadow;
    }

    // 라이트맵 교체
    savedLightMaps = LightmapSettings.lightmaps.ToArray();
    
    LightmapSettings.lightmapsMode 	= LightmapsMode.NonDirectional;
    LightmapSettings.lightmaps 		= lightmapData;

    // 기다림
    yield return new WaitForSeconds(powerOutageDuration);

    // 라이트맵 복원
    LightmapSettings.lightmapsMode 	= LightmapsMode.CombinedDirectional;
    LightmapSettings.lightmaps 		= savedLightMaps.ToArray();
}
728x90
반응형