using UnityEngine;
namespace BoatAttack
{
///
/// This make lower LOD levels use the same Lightmaps/offsets as LOD0
///
[RequireComponent(typeof(LODGroup)), ExecuteInEditMode]
public class LodLightmaps : MonoBehaviour
{
private LODGroup _lodGrp; // the LOD group
private Renderer[] _main; // LOD0 Meshes
private Renderer[] _lod1; // LOD2 Meshes
private Renderer[] _lod2; // LOD3 Meshes
private Renderer[] _lod3; // LOD3 Meshes
private void OnEnable()
{
CopyLightmapSettings();
}
///
/// Loops through and copies light map index and offset from LOD0 to LOD1+2
///
void CopyLightmapSettings()
{
_lodGrp = GetComponent();
var lods = _lodGrp.GetLODs();
_main = lods[0].renderers;
for (var i = 1; i < lods.Length; i++)
{
switch (i)
{
case 1:
_lod1 = lods[i].renderers;
break;
case 2:
_lod2 = lods[i].renderers;
break;
case 3:
_lod3 = lods[i].renderers;
break;
}
}
var lmIndex = new int[_main.Length];
var lmScaleOffset = new Vector4[_main.Length];
for (var i = 0; i < _main.Length; i++)
{
lmIndex[i] = _main[i].lightmapIndex;
lmScaleOffset[i] = _main[i].lightmapScaleOffset;
}
for (var i = 0; i < _main.Length; i++)
{
#pragma warning disable
_lod1[i].lightmapIndex = lmIndex[i];
_lod1[i].lightmapScaleOffset = lmScaleOffset[i];
if (!_lod2[i]) continue;
_lod2[i].lightmapIndex = lmIndex[i];
_lod2[i].lightmapScaleOffset = lmScaleOffset[i];
if (!_lod3[i]) continue;
_lod3[i].lightmapIndex = lmIndex[i];
_lod3[i].lightmapScaleOffset = lmScaleOffset[i];
#pragma warning restore
}
}
}
}