更换材质球 &&天空盒

 public GameObject Balls;
/// <summary>
     /// 更换材质球的Texture
     /// </summary>
     /// <param name="name">图片的名字</param>
    void ChangeMater(string name)
    {
        Balls.GetComponent<MeshRenderer>().material.mainTexture=  Resources.Load<Texture>(string.Format("UI/Class/Class7008/{0}", name));
    }

在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     }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rain_love_snow

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值