unity Material的批量修改和单独处理

时间:2024-03-13 16:30:56

蹭一波1024的热度,祝大家节日快乐。

Material

unity为我们提供了Material这一模块,使得我们对游戏对象的各种渲染操作更加便捷。

unity Material的批量修改和单独处理

 

一个完整的Material由shader和Texture组成。

unity Material的批量修改和单独处理

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到内存中去,这样修改后就不会影响到其他物体了。