unity标准材质球动态改值和共用材质不同设置问题

46 篇文章 2 订阅
14 篇文章 0 订阅

可以用SetPropertyBlock方式来实现多个物体共享材质,有部分属性略有不同的情况

这种方式被用在unity的地形上,里面的树就是通过这种方式实现不同树共用材质,

却可以有不同的颜色倾向,风力效果等等

这种方式可以在一定程度上简化材质数量,提高效率

注意SetPropertyBlock 并不支持UI.Image,因为不能取到render组件

用法如下

        MaterialPropertyBlock propertyBlock = new MaterialPropertyBlock();
        obj.GetComponent<Renderer>().GetPropertyBlock(propertyBlock);
        propertyBlock.SetColor("_Color", new Color(0.5f, 0, 0, 1));
        obj.GetComponent<Renderer>().SetPropertyBlock(propertyBlock);
如果是直接用

obj.GetComponent<Renderer>().material.color = Color.red;

可以在运行状态发现材质变成了新的实例,而不是使用以前的材质


通过脚本设置标准材质颜色

有下面这么多种属性可以被设置

     _Color
     _MainTex
     _Cutoff
     _Glossiness
     _Metallic
     _MetallicGlossMap
     _BumpScale
     _BumpMap
     _Parallax
     _ParallaxMap
     _OcclusionStrength
     _OcclusionMap
     _EmissionColor
     _EmissionMap
     _DetailMask
     _DetailAlbedoMap
     _DetailNormalMapScale
     _DetailNormalMap
     _UVSec
     _EmissionScaleUI
     _EmissionColorUI
     _Mode
     _SrcBlend
     _DstBlend
     _ZWrite
可以通过
        obj.GetComponent<Renderer>().material.SetColor("_Color",new Color(0.5f,0,0,1));
        obj.GetComponent<Renderer>().material.SetTexture("_MainTex", pic);

等来设置

或者

obj.GetComponent<Renderer>().material.color = Color.red;


7.30.2016概念修正,因为有人看了感到混乱,这里强调更正一下

另外不要和sharedMaterial用混,sharedMaterial并不能实现不同物体使用同一个材质而有不同颜色之类属性的问题

sharedMaterial是用在运行时候改变材质的,这比直接修改material快速

因为不需要新建材质来进行改变,直接用material实际上新建了一个材质

但是这种方式会改变project中的材质设置,最好用在发布时

有时使用不当也会引起内存泄漏

另外可以看看这里的

http://www.xuanyusong.com/archives/2530


参考地址

http://docs.unity3d.com/ScriptReference/MaterialPropertyBlock.html

http://forum.unity3d.com/threads/different-material-properties-shader-uniforms-for-objects-with-a-shared-material.367477/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值