更換材質球 &&天空盒

 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     }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章