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