MaterialPropertyBlock

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

接下来改一下代码,使用MaterialPropertyBlock来作为设置颜色的手段:
MaterialPropertyBlock_第5张图片
可以看到我们会先new一个MaterialPropertyBlock,然后给它赋值,最后用Renderer.SetPropertyBlock方式给MeshRender设置属性。

运行时,可以看到运行的结果和之前的写法是一样的。
MaterialPropertyBlock_第6张图片

再从Profiler里面看看内存。
MaterialPropertyBlock_第7张图片
这次可以看到,并没有生成任何的Material的实例出来。

你可能感兴趣的:(unity相关)