Mesh中 material 和 sharedMaterial 的区别及内部实现的推断

material 和 sharedMaterial 的区别

创建一个Material, 颜色为红色,
创建两个Quad,挂上刚刚创建的材质。 效果如下图:

将第一个Quad挂载如下脚本, 运行:

render = GetComponent<Renderer>();
render.material.color = Color.white;

效果如下图:

修改脚本内容如下, 运行:

render = GetComponent<Renderer>();
render.sharedMaterial.color = Color.white;

Quad的颜色变了
效果如下图:

如何来解释上面的现象呢, 根据官方文档

Renderer.sharedMaterial

sharedMaterial 是共用的 Material,称为共享材质。修改共享材质会改变所用使用该材质的物体,并且编辑器中的材质设置也会改变。

Renderer.material

material 是独立的 Material,返回分配给渲染器的第一个材质。修改材质仅会改变该物体的材质。如果该材质被其他的渲染器使用,将克隆该材质并用于当前的渲染器。


推测 sharedMaterial 和 material 的实现

下面我们通过一些实现猜测 material 是如何实现的:

我们从 UnityEngine.Renderer 中可得知 sharedMaterial 和 material 是属性(property),当给属性赋值时会隐式的调用 set 方法,当获取属性值得时候会隐式的调用 get 方法。假设 sharedMaterial 的值变量假设为 _sharedMaterial, materi

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值