Unity3D 5.0+ 动态加载模型和对应Light Map方法

前提必要:
1、需要有Mesh Renderer的静态模型
2、需要有符合模型的Light Map
3、关闭Lighting 中的Auto Build

Unity3D 5.0+ 动态加载模型和对应Light Map方法_第1张图片

​操作步骤:
1、导入Light Map并修改格式

Unity3D 5.0+ 动态加载模型和对应Light Map方法_第2张图片

​2、使用脚本为场景加载导入的Light Map到Light Map Settings
2.1、Light Map不能直接被加载到Light Map Settings 所以需要在脚本中创建一个Light Map Data数组来储存场景当前状态下需要用到的所有Light Map并赋予给Light Map Settings
脚本示例:
//Light Map数组
Texture2D[] DayNear;Texture2D[] DayFar;
//Light Map Data数组
LightmapData[] dayLightMaps;
//把LightMap 加入Light Map Data数组
dayLightMaps = new LightmapData[DayNear.Length];
for (int i=0; i{

dayLightMaps[i] = new LightmapData();
dayLightMaps[i].lightmapNear = DayNear[i];
​ dayLightMaps[i].lightmapFar = DayFar[i];
​}
//更改当前场景Light Map状态
LightmapSettings.lightmaps = dayLightMaps;

2.2、Light Map在Light Map Data中的顺序会影响到Light Map Index 所以最好加入自动排序命令 如不加则需要手动排序
脚本示例:
using System.Linq;
DayNear = DayNear.OrderBy(t2d => t2d.name, new NaturalSortComparer()).ToArray();

2.3、Light Map分为远近(lightmapNear、lightmapFar )两种 如Light Map只有一张则需将其同时贴在两种类型上

3、通过Light Map Index指定静态模型使用某张Light Map 编号可在Lighting中的Lightmaps查询到
脚本示例:
transform.GetComponent<MeshRenderer>().lightmapIndex = 0;

Light Map Index如图:

Unity3D 5.0+ 动态加载模型和对应Light Map方法_第3张图片

注意事项:
1、Light Map不可被Light Map Settings单独调用 需要更替必须存入Light Map Data后赋予给Light Map Settings
2、某单个静态模型需要动态调用时如果当前Light Map Settings
中已有其所使用的Light Map 则只需指定Light Map Index即可 无需更替Light Map Settings

扩展效果:
1、可做多个静态Light Map Data数组储存Light Map按照指定顺序替换产生动态光影效果(如昼夜交替)

你可能感兴趣的:(Unity3D 5.0+ 动态加载模型和对应Light Map方法)