首页 > 代码库 > 关于Unity中如何代码动态修改天空盒
关于Unity中如何代码动态修改天空盒
在Unity中动态修改天空盒有两种方法:
一、为每个Texture建立天空盒材质球,需要更换时直接将对应材质球作为天空盒,缺点是建立的材质球太多
private void ChangeSkybox(Material newSkybox) { RenderSettings.skybox = newSkybox; }
二、只创建一个天空盒材质球,通过修改Material的贴图Cubemap来动态替换,优点是不需要创建额外的材质球
但是使用一般的Material.mainTexture属性无法赋值Cubemap类型的贴图。
通过查阅Unity - Scripting API,找到一个修改Material的Texture的方法:Material.SetTexture(string name, Texture value)
我们发现通过指定其中的参数name可以获取对应的贴图位置。但是并没有说明Cubemap的参数是什么。因此只能去查看Shader的Property。
选中创建的天空盒材质球,右键点击Shader选择Edit Shader...,打开Shader的详细信息,如下图所示
在打开的Shader详细信息中我们发现了在Properties有这样一行
原来Cubemap的name参数应该填的是“_Tex”,name参数其实指的是Shader中对应的Property属性。
所以通过以下方法可以动态更换天空盒的Cubemap贴图
1 private void ChangeSkybox(Texture texture) 2 { 3 RenderSettings.skybox.SetTexture("_Tex", texture); 4 }
关于Unity中如何代码动态修改天空盒
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。