在unity中,有这样一种情形,有许多的物体,都使用了相同的材质球,但是呢,具体的细节又有些微的不同,如果想要些微的改变每一个 网格的颜色,改变 渲染状态是不行的。
这时,就可以使用MaterialPropertyBlock这个API。这个类将被传递给 Graphics.DrawMesh 或者Renderer.SetPropertyBlock,所以说,最高效的使用方式是创造一个block,然后在每一个网格 绘制 调用中复用。
如果要改变颜色,那么可以使用 MaterialPropertyBlock.SetColor(string name,Color value)。
需要注意的是,这里的value参数是 sRGB格式,并且如果激活颜色空间是线性的,那么这个值也会转换为线性的。如果你在不同的颜色格式中设置值,那么你需要手动转换。
using UnityEngine;
// Draws 3 meshes with the same material but with different colors.
public class ExampleClass : MonoBehaviour
{
public Mesh mesh;
public Material material;
private MaterialPropertyBlock block;
private int colorID;
void Start()
{
block = new MaterialPropertyBlock();
colorID = Shader.PropertyToID("\_Color");
}
void Update()
{
// red mesh
block.SetColor(colorID, Color.red);
Graphics.DrawMesh(mesh, new Vector3(, , ), Quaternion.identity, material, , null, , block);
// green mesh
block.SetColor(colorID, Color.green);
Graphics.DrawMesh(mesh, new Vector3(, , ), Quaternion.identity, material, , null, , block);
// blue mesh
block.SetColor(colorID, Color.blue);
Graphics.DrawMesh(mesh, new Vector3(-, , ), Quaternion.identity, material, , null, , block);
}
}
手机扫一扫
移动阅读更方便
你可能感兴趣的文章