MaterialPropertyBlock
阅读原文时间:2023年07月10日阅读:1

在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);  
 }  

}

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章