一般我们修改材质球参数是直接拿对于材质球来设置参数,不过还有优化空间
使用材质球属性块来代替直接修改材质球属性
材质属性块被用于Graphics.DrawMesh和Renderer.SetPropertyBlock两个API,当我们想要绘制许多相同材质但不同属性的对象时可以使用它。例如你想改变每个绘制网格的颜色,但是它却不会改变渲染器的状态。
我们来看看Renderer这个类,它包含了Material,SharedMaterial这两个属性;GetPropertyBlock,SetPropertyBlock这两个函数,其中两个属性是用来访问和改变材质的,而两个函数是用来设置和获取材质属性块的。我们知道,当我们操作材质共性时,可以使用SharedMaterial属性,改变这个属性,那么所有使用此材质的物件都将会改变,而我们需要改变单一材质时,需要使用Material属性,而在第一次使用Material时其实是会生成一份材质拷贝的,即Material(Instance),而使用材质属性块不会拷贝一份材质球,从而效率更高
下面写个简单的使用方法
- int propertyId = Shader.PropertyToID("shader变量");
- MaterialPropertyBlock p = null ;
- r.GetPropertyBlock(p);
- p.SetInt(propertyId, 1);
- r.SetPropertyBlock(p);
优化是一点一滴积累出来,为了兼容更多玩家,必须尽可能优化
这里只是记录一下优化
联系客服