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 }

 

转载于:https://www.cnblogs.com/leiGameDesigner/p/9115333.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值