注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

重新出发的阿赵

阿赵的博客

 
 
 

日志

 
 

MaterialPropertyBlock  

2017-10-03 17:38:54|  分类: Unity教程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
使用Unity3D做开发的朋友应该都知道,对于实例化出来的模型,我们改变它身上的颜色值或者贴图之类,Unity是会把它当前使用的ShareMaterial复制一份实例出来,以做到不同对象身上的材质互不影响的改变参数。但这样做会导致如果使用的对象很多,就会产生很多材质的实例的问题,这样会对内存有一定的消耗。
下面做了这么一个例子:
MaterialPropertyBlock - 阿赵 - 重新出发的阿赵
 在场景里面生成了多个cube,然后用代码改变他们的颜色:
MaterialPropertyBlock - 阿赵 - 重新出发的阿赵
 给每一个cube随机一种颜色,然后用传统的material.color来设置颜色。

MaterialPropertyBlock - 阿赵 - 重新出发的阿赵
 结果会是这样,各个cube的颜色变化了。
MaterialPropertyBlock - 阿赵 - 重新出发的阿赵
 从Profiler里面看看内存,会发现场景内存里面,有很多的InstanceMat(Instance)。这就是生成出来的材质实例。

接下来改一下代码,使用MaterialPropertyBlock来作为设置颜色的手段:
MaterialPropertyBlock - 阿赵 - 重新出发的阿赵
可以看到我们会先new一个MaterialPropertyBlock,然后给它赋值,最后用Renderer.SetPropertyBlock方式给MeshRender设置属性。 

运行时,可以看到运行的结果和之前的写法是一样的。
MaterialPropertyBlock - 阿赵 - 重新出发的阿赵
 
再从Profiler里面看看内存。
MaterialPropertyBlock - 阿赵 - 重新出发的阿赵
这次可以看到,并没有生成任何的Material的实例出来。
 
  评论这张
 
阅读(78)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017