unity Material的批量修改和單獨處理
阿新 • • 發佈:2018-12-17
蹭一波1024的熱度,祝大家節日快樂。
Material
unity為我們提供了Material這一模組,使得我們對遊戲物件的各種渲染操作更加便捷。
一個完整的Material由shader和Texture組成。
shader:整個Material的面板其實都是由對應的shader決定的,這個視覺化的部分由unity shader提供。
Texture:在unity中貼圖不是必須的,即使沒有貼圖也不妨礙unity的渲染工作。但是更加複雜的渲染效果還是需要各式貼圖配 合的。
批量處理
在unity的規則中,凡是使用同一個材質球(
之前部落格有提到過:
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到記憶體中去,這樣修改後就不會影響到其他物體了。