關於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     }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM