material 和 sharedMaterial 的区别
创建一个Material, 颜色为红色,
创建两个Quad,挂上刚刚创建的材质。 效果如下图:
将第一个Quad挂载如下脚本, 运行:
render = GetComponent<Renderer>();
render.material.color = Color.white;
效果如下图:
修改脚本内容如下, 运行:
render = GetComponent<Renderer>();
render.sharedMaterial.color = Color.white;
Quad的颜色变了
效果如下图:
如何来解释上面的现象呢, 根据官方文档
sharedMaterial 是共用的 Material,称为共享材质。修改共享材质会改变所用使用该材质的物体,并且编辑器中的材质设置也会改变。
material 是独立的 Material,返回分配给渲染器的第一个材质。修改材质仅会改变该物体的材质。如果该材质被其他的渲染器使用,将克隆该材质并用于当前的渲染器。
推测 sharedMaterial 和 material 的实现
下面我们通过一些实现猜测 material 是如何实现的:
我们从 UnityEngine.Renderer 中可得知 sharedMaterial 和 material 是属性(property),当给属性赋值时会隐式的调用 set 方法,当获取属性值得时候会隐式的调用 get 方法。假设 sharedMaterial 的值变量假设为 _sharedMaterial, materi