预制体读取光照图
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class PrefabLightmapData : MonoBehaviour
{
[System.Serializable]
public struct RendererInfo
{
public Renderer renderer;
public int lightingIndex;
public Vector4 lightmapOffsetScale;
}
public List lightmapTexs = new List(); //当前场景的灯光贴图
public List rendererList = new List();
public List rendererLightmapIndex = new List();
#if UNITY_EDITOR
public void SaveLightmap()
{
Renderer[] renders = GetComponentsInChildren();
RendererInfo rendererInfo;
lightmapTexs.Clear();
rendererList.Clear();
for (int r = 0, rLength = renders.Length; r < rLength; ++r)
{
if (renders[r].gameObject.isStatic == false || renders[r].lightmapIndex == -1) continue;
rendererInfo.renderer = renders[r];
rendererInfo.lightmapOffsetScale = renders[r].lightmapScaleOffset;
Texture2D lightmapLight = LightmapSettings.lightmaps[renders[r].lightmapIndex].lightmapColor;
if (!lightmapTexs.Contains(lightmapLight))
{
lightmapTexs.Add(lightmapLight);
}
rendererInfo.lightingIndex = lightmapTexs.IndexOf(lightmapLight);
rendererList.Add(rendererInfo);
}
}
#endif
private void OnEnable()
{
this.LoadLightMap();
}
public void LoadLightMap()
{
rendererLightmapIndex.Clear();
for (int i = 0; i < rendererList.Count; i++)
{
rendererLightmapIndex.Add(0);
}
if (rendererList.Count == 0 || rendererList == null)
{
return;
}
for (int i = 0; i < rendererList.Count; i++)
{
rendererList[i].renderer.lightmapScaleOffset = rendererList[i].lightmapOffsetScale;
Texture2D lightmap = lightmapTexs[rendererList[i].lightingIndex];
int index = LightmapIndexOf(lightmap);
if (index == -1)
{
LightmapData[] lightmaps = new LightmapData[LightmapSettings.lightmaps.Length + 1];
for (int j = 0; j < LightmapSettings.lightmaps.Length; j++)
{
LightmapData lightdata = new LightmapData();
lightdata.lightmapColor = LightmapSettings.lightmaps[j].lightmapColor;
lightmaps[j] = lightdata;
}
lightmaps[lightmaps.Length - 1] = new LightmapData();
lightmaps[lightmaps.Length - 1].lightmapColor = lightmap;
rendererList[i].renderer.lightmapIndex = lightmaps.Length - 1;
LightmapSettings.lightmaps = lightmaps;
rendererLightmapIndex[i] = lightmaps.Length - 1;
}
else
{
rendererList[i].renderer.lightmapIndex = index;
rendererLightmapIndex[i] = index;
}
}
}
int LightmapIndexOf(Texture2D lightmap)
{
for (int i = 0; i < LightmapSettings.lightmaps.Length; i++)
{
if (lightmap == LightmapSettings.lightmaps[i].lightmapColor)
{
return i;
}
}
return -1;
}
//设置光照贴图
public void SetLightmap(bool open)
{
if (open)
{
for (int i = 0; i < rendererList.Count; i++)
{
rendererList[i].renderer.lightmapIndex = rendererLightmapIndex[i];
}
}
else
{
for (int i = 0; i < rendererList.Count; i++)
{
rendererList[i].renderer.lightmapIndex = -1;
}
}
}
}using UnityEngine;
using Syst