1. 程式人生 > >unity Material的批量修改和單獨處理

unity Material的批量修改和單獨處理

蹭一波1024的熱度,祝大家節日快樂。

Material

unity為我們提供了Material這一模組,使得我們對遊戲物件的各種渲染操作更加便捷。

一個完整的Material由shader和Texture組成。

shader:整個Material的面板其實都是由對應的shader決定的,這個視覺化的部分由unity shader提供。

Texture:在unity中貼圖不是必須的,即使沒有貼圖也不妨礙unity的渲染工作。但是更加複雜的渲染效果還是需要各式貼圖配                   合的。

批量處理

       在unity的規則中,凡是使用同一個材質球(

Material)的遊戲物體,只要材質球被修改,不論是靜態還是動態的,所有遊戲物體都會被改變。

之前部落格有提到過:

void Update()
    {
            if (transform.GetComponent<MeshRenderer>().materials[1].color.r > 0)
            {
                transform.GetComponent<MeshRenderer>().materials[1].color -= new Color(1, 0, 0)*Time.deltaTime*0.5f;
            }
            if (transform.GetComponent<MeshRenderer>().materials[1].color.g > 213)
            {
                transform.GetComponent<MeshRenderer>().materials[1].color -= new Color(0,1,0) * Time.deltaTime*0.5f;
            }
    }

單獨修改

        我們可能會遇見批量生成相同的遊戲物件,但是卻需要單獨修改其中某一個物件的Material,這時就不能用上面的MeshRenderer了,因為MeshRenderer裡面儲存的Materials指向的是sharedMarerial,即專案工程中材質球的原始屬性設定。

GetComponent<Renderer>().material.color = color;

        當使用Renderer.material的時候,每次呼叫都會生成一個新的material到記憶體中去,這樣修改後就不會影響到其他物體了。