关于Unity中如何代码动态修改天空盒

Posted 流星与蝴蝶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于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中如何代码动态修改天空盒的主要内容,如果未能解决你的问题,请参考以下文章

unity 中怎样设置动态天空盒,让天空盒上的云动起来

在Unity场景中更改天空盒的步骤

unity3d中c#如何修改物体局部的颜色

关于Unity中天空盒的使用

Unity场景打AssetBundle包,加载后天空盒材质丢失问题及解决

OpenGL中天空盒的程序/动态着色