前一段时间,项目游戏要换场景资源,美术部把做好的场景模型经过光照贴图处理;让我替换资源,但是我一看傻眼了,这么资源要替换,后来我观察发现,原来的场景里的模型和现在的一样,但是,就是少了光照烘焙信息:
有三个办法可以解决:
1,手动把资源一一替换,麻烦,累,谁都不想干;
2,:我们可以找到某个prefab的名字,然后直接替换prefab,然后把名字再改为一样,能解决模型,和光照信息;
比如要替换a.prefab; 路径: Assets/Res/Prefabs/road/a.prefab
Gameobject a=Gameobject.Find("a");
Gameobject road = Resources.LoadAssetAtPath ( "Assets/Res/Prefabs/road/a.prefab", typeof ( GameObject ) ) as GameObject;
GameObject roadinstance=Instantiate ( road, Vector3.zero, Quaternion.identity ) as GameObject;
roadinstance.transform.localPosition = a.transform.localPosition;
roadinstance.transform.localEulerAngles = a.transform.localEulerAngles;
roadinstance.transform.localScale = a.transform.localScale;
roadinstance.name =a.name;
DestroyImmediate ( g );
这个可能会有问题,一定要把替换的信息全替换了,代码量会多,要考虑全。
ok,问题解决了。
3,如果说模型和要替换的模型都一样;这是我们就直接修改它的光照贴图信息就ok了
那么renderer.lightmapTilingOffset,及renderer.lightmapIndex,解决了我们的问题
lightmapTilingOffset是该模型所在光照贴图的位置,lightmapIndex是该模型所用到那一张光照贴图;
例如:在场景中的b.prefab的光照信息丢失了,那么我就找到原来的b.prefab例如是a.prefab,进行烘焙,要保证b.prefab的模型和a.的模型一致
b.renderer.lightmapTilingOffset=a.renderer.lightmapTilingOffset;
b.renderer.lightmapIndex=a.renderer.lightmapIndex;
问题解决啦,很不错吧!