问题
- 我有一个Unity早期版本的工程(在Unity5之前),里面的光照贴图是Unity外部的。我想把它升级到Unity5。
- 我想在Unity5中使用使用外部光照贴图。
- 如果使用了脚本修改了光照贴图的任何属性,或关闭场景/重新打开场景,之前所做的改变没有被显示出来。
原因
为了让外部光照贴图能够在场景中显示,首先必须要用脚本API设置多个参数值。
在Unity4中,当你保存场景时,这些值是自动被序列化的;光照贴图的属性会保存到场景文件中。
但是自动化过程例如点击烘焙按钮,就会导致许多变化,非常有可能导致场景中的合并冲突。
在Unity5中,外部光照贴图的属性仅当一个光照图建立的时候才会被序列化。这可以避免合并冲突。因此,如果你改变一个参数并且加载进场景,改变是不会显示的。
解决方法
使用外部光照贴图,你需要有:
- 将外部光照贴图存放于某个文件夹中
- 一个能被创建的脚本
一个LightmapSettings.lightmaps 数组,你可以将外部光照贴图存储在里面(在编辑器中创建公共的可显示数据数组类型,然后把你的光照贴图拖到被创建的位置)
然后,你需要参考对象渲染器以及通过访问光照贴图的数组指针来指定外部光照贴图(Renderer.lightmapIndex)。下一步,你应该通过scale & offset 指向里面的一个特殊区域。(Renderer.lightmapScaleOffset)。
最后,你需要在文件中序列化所有属性信息,当场景每次打开时,通过编辑器脚本重置这个信息。这也可以通过脚本完成。
更多信息
如需了解更多相关信息,可以看下面的链接:
http://docs.unity3d.com/Manual/LightmapSnapshot.html
http://forum.unity3d.com/threads/lightmapping-nightmare.317008/#post-2060995
http://forum.unity3d.com/threads/problems-with-instantiating-baked-prefabs.324514/#post-2177524