赞
踩
我们使用LightmapSettings.lightmaps设置场景中的光照贴图的信息。LightmapSetting的结构如下:
[NativeHeader("Runtime/Graphics/LightmapSettings.h")]
[StaticAccessor("GetLightmapSettings()")]
public sealed class LightmapSettings : Object
{
//光照贴图
public static LightmapData[] lightmaps { get; set; }
//光照模式
public static LightmapsMode lightmapsMode { get; set; }
//光照探针
public static LightProbes lightProbes { get; set; }
}
[NativeHeader("Runtime/Graphics/LightmapData.h")]
[UsedByNativeCode]
public sealed class LightmapData
{
public LightmapData();
public Texture2D lightmapColor { get; set; }
public Texture2D lightmapDir { get; set; }
public Texture2D shadowMask { get; set; }
}
当有多场景共存的时候,多个场景的光照贴图是依次按照顺序排在一起的。如下
也就是说当我们需要更改LightmapSetting.lightmaps的一部分数据时,需要重新对LightmapSetting.lightmaps复制,单独改变某一个数据(比如:LightmapSetting.lightmaps[0])是无法修正的。
public class ShadowMapTest : MonoBehaviour
{
public Texture2D lightMap;
private void OnGUI()
{
if (GUI.Button(new Rect(50,50,30,30),"切换单个图片"))
{
//--这种操作方式是无效的,并不会完成数据修改,虽然都是引用类型,不知道unity内部做了什么处理
LightmapSettings.lightmaps[0].lightmapColor = lightMap;
}
if (GUI.Button(new Rect(50, 100, 30, 30), "全部切换"))
{
//--虽然只是替换第一个贴图,我们需要重新创建一个数组,然后复制,修改新数组的数据,之后赋值,
//--光照贴图的替换才会生效
LightmapData[] data = new LightmapData[LightmapSettings.lightmaps.Length];
LightmapSettings.lightmaps.CopyTo(data, 0);
data[0].lightmapColor = lightMap;
LightmapSettings.lightmaps = data;
}
}
}
为什么需要全部修改才可以替换成功,因为在底层,每次调用LightmapSettings.lightmaps的get方法,都会给我们返回一个新的数组,所以在使用时我们需要注意效率,不用额外new数组。比如下面可以进行优化
//--这是上面的切换成功的代码
if (GUI.Button(new Rect(50, 100, 30, 30), "全部切换"))
{
LightmapData[] data = new LightmapData[LightmapSettings.lightmaps.Length];
LightmapSettings.lightmaps.CopyTo(data, 0);
data[0].lightmapColor = lightMap;
LightmapSettings.lightmaps = data;
}
//--更改为如下方式,可以优化
if (GUI.Button(new Rect(50, 100, 30, 30), "全部切换"))
{
//--获取到这个数组,这个数组是一个新的数组,我们直接更改即可
//--但是不能LightmapSettings.lightmaps[0].lightmapColor = lightMap这样修改,不明白为什么,从头看一遍
LightmapData[] data = LightmapSettings.lightmaps;
data[0].lightmapColor = lightMap;
LightmapSettings.lightmaps = data;
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。