FantasyAsset/Assets/Scripts/LightmappedLOD.cs
naumanbutt0000 587a78ef61 iceTemple
added IceTempleScene in FantastAssests
2025-09-23 23:10:39 +05:00

79 lines
2.6 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace LegendaryCavesAndDungeons
{
[ExecuteInEditMode]
public class LightmappedLOD : MonoBehaviour
{
private MeshRenderer currentRenderer;
// Get mesh renderer on host
private void Awake()
{
currentRenderer = gameObject.GetComponent<MeshRenderer>();
RendererInfoTransfer();
}
// In editor evaluate RendererInfoTransfer() each time there is a LOD switch
#if UNITY_EDITOR
void OnBecameVisible()
{
if( !Application.isPlaying )
RendererInfoTransfer();
}
#endif
void RendererInfoTransfer()
{
if( GetComponentInParent<LODGroup>() == null || currentRenderer == null )
return;
//Gather LODs
var lods = GetComponentInParent<LODGroup>().GetLODs();
int currentRendererLodIndex = -1;
//Find which LOD is the current renderer part of
for( int i = 0; i < lods.Length; i++ )
{
for( int j = 0; j < lods[i].renderers.Length; j++ )
{
if( currentRenderer == lods[i].renderers[j] )
currentRendererLodIndex = i;
}
}
if( currentRendererLodIndex == -1 )
{
Debug.Log( "Lightmapped LOD : lod index not found on " + gameObject.name );
return;
}
//Apply settings from LOD0 to current LOD
var renderers = lods[currentRendererLodIndex].renderers;
for( int i = 0; i < renderers.Length; i++ )
{
if( renderers[i] != null )
{
try
{
renderers[i].lightProbeUsage = lods[0].renderers[i].lightProbeUsage;
renderers[i].lightmapIndex = lods[0].renderers[i].lightmapIndex;
renderers[i].lightmapScaleOffset = lods[0].renderers[i].lightmapScaleOffset;
renderers[i].realtimeLightmapIndex = lods[0].renderers[i].realtimeLightmapIndex;
renderers[i].realtimeLightmapScaleOffset = lods[0].renderers[i].realtimeLightmapScaleOffset;
}
catch
{
if( Debug.isDebugBuild )
Debug.Log( "Lightmapped LOD : Error setting lightmap settings on " + gameObject.name );
}
}
}
}
}
}