Material与ShareMaterial引用的区别

我们在使用Unity引擎的时候,有时候需要去修改某个物体上的Material,在Unity的Renderer类里,提供了两个方法接口供我们使用。
Renderer.material和Renderer.sharedMaterial
那么这两货有什么区别呢!

Material

Unity中每个MeshRenderer组件里有个Materals属性,这个数组决定了该物体下可以放几个material组件,默认是1。
当同一个物体上有很多个material的时候,我们可以手动更改material组件的上下位置关系。这里的********第一个实例化后的****material****指的就是该物体上从上往下的第一个material组件,而不是Renderer.materials[0]。
cube01.GetComponent ().material.color = Color.black;
上面的代码在执行的时候其实是这样的一个过程:
Material lastMat = cube01.GetComponent ().material; Material m = Instantiate(lastMat) as Material; cube01.GetComponent ().material = m; m.color = Color.black;
也就是说我们每一次引用就会生成一个新的material到内存中。但是在引用后并不会改变我们项目工程中材质球的原始属性设置。

ShareMaterial

当我们改变Renderer.sharedMaterial的时候,所有使用这个材质球物体都会被改变,并且改变后的设置将会被保存在项目工程中。
官方并不推荐使用这个属性去修改material。