首页 > 手游开发 > Unity3D > MaterialPropertyBlock
2019
02-26

MaterialPropertyBlock

在unity中,有这样一种情形,有许多的物体,都使用了相同的材质球,但是呢,具体的细节又有些微的不同,如果想要些微的改变每一个 网格的颜色,改变 渲染状态是不行的。

这时,就可以使用MaterialPropertyBlock这个API。这个类将被传递给  Graphics.DrawMesh 或者Renderer.SetPropertyBlock,所以说,最高效的使用方式是创造一个block,然后在每一个网格 绘制 调用中复用。

如果要改变颜色,那么可以使用 MaterialPropertyBlock.SetColor(string name,Color value)。

需要注意的是,这里的value参数是 sRGB格式,并且如果激活颜色空间是线性的,那么这个值也会转换为线性的。如果你在不同的颜色格式中设置值,那么你需要手动转换。

 1 using UnityEngine;  2   3 // Draws 3 meshes with the same material but with different colors.  4 public class ExampleClass : MonoBehaviour  5 {  6     public Mesh mesh;  7     public Material material;  8     private MaterialPropertyBlock block;  9     private int colorID; 10  11     void Start() 12     { 13         block = new MaterialPropertyBlock(); 14         colorID = Shader.PropertyToID("_Color"); 15     } 16  17     void Update() 18     { 19         // red mesh 20         block.SetColor(colorID, Color.red); 21         Graphics.DrawMesh(mesh, new Vector3(0, 0, 0), Quaternion.identity, material, 0, null, 0, block); 22  23         // green mesh 24         block.SetColor(colorID, Color.green); 25         Graphics.DrawMesh(mesh, new Vector3(5, 0, 0), Quaternion.identity, material, 0, null, 0, block); 26  27         // blue mesh 28         block.SetColor(colorID, Color.blue); 29         Graphics.DrawMesh(mesh, new Vector3(-5, 0, 0), Quaternion.identity, material, 0, null, 0, block); 30     } 31 }

 

最后编辑:
作者:小熊, 维尼
这个作者貌似有点懒,什么都没有留下。

留下一个回复

你的email不会被公开。