MaterialPropertyBlock
MaterialPropertyBlock mpb = new MaterialPropertyBlock();//最好全局唯一静态对象 Render(MeshRenderer、SpriteRenderer).GetPropertyBlock(mpb); mpb.SetFloat(...)//类似material.SetFloat使用 Render(MeshRenderer、SpriteRenderer).SetPropertyBlock(mpb);
这样更改材质属性不会产生新的材质实例,而是会产生一个新的存储区域在CPU,它配合GPU Instancing使用。
因为GPU Instancing要求同网格同材质,而且不支持SRPBatch(凡是使用MPB的则不可能生效SRPBatch,理由是SRPBatch必须所有改动属性都在GPU的CBuffer中,不然会打破Batch)