有时候的动态加载场景(一)——有时候_ON,

有时候的动态加载场景(一)——有时候_ON,

有时候我们需要动态加载场景(比如场景比较大,或者一些无限重复的自动生成场景),那么如果场景是用来烘焙的,那么unity5会出现一些小问题。

1.在这个要求下,我们通常将场景物体保存为preset,在需要的时候加载进去,但是在unity5中,不会记录物体的光照贴图信息(index和offset)预设,这会导致您直接加载预设以查看烘焙效果。这里方法,加载后手动分配lightmap信息unity重新加载场景,(烘焙时可以提前保存这个信息),使用render lightmapIndex和lightmapScaleOffset设置其烘焙信息。

2.但是,使用上面的方法,对于一些shader还是会看到错误的结果(编辑器是对的,至少在android设备上是错误的),因为unity5在一些设备上,对于这种动态加载对象,无论你设置了它的渲染器的lightmapIndex和lightmapScaleOffset,它都不会为它的shader设置关键字LIGHTMAP_ON。如果查看Unity中支持lightmap的shader的源码unity重新加载场景,可以发现这个LIGHTMAP_ON控制了烘焙图像的显示。关键3D素材,但是这种情况下unity5不会设置3D道具,也不能手动设置。这里有一种修改shader的方法,自己添加一组关键字,比如DYNAMIC_LIGHTMAP_ON。即使没有定义LIGHTMAP_ON,如果定义了DYNAMIC_LIGHTMAP_ON,也会触发光照贴图纹理,然后在代码中加载动态场景后,设置这个关键字。

据说UNity4没有这个问题。对于动态场景,直接加载会自动有光照贴图,因为unity4会将光照贴图信息存储在presets中。