• 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 }
  • 相关阅读:
    [转]如何从无到有建立推荐系统
    sql语句查询重复值
    推荐系统开发中十个关键点整理
    mongodb中的副本集搭建实践
    Unicode对象
    5W1H
    Python中实现switch分支结构
    数据结构-跳跃表
    redis入门笔记(3)
    redis入门笔记(2)
  • 原文地址:https://www.cnblogs.com/leiGameDesigner/p/9115333.html
Copyright © 2020-2023  润新知