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 }