name | 属性的名称。 |
nameID | 通过 Shader.PropertyToID 检索的属性的名称 ID。 |
value | 要设置的 Color 值。 |
设置颜色属性。
向代码块添加属性。如果具有给定名称的颜色属性已存在,则替换旧值。
颜色值被视为始终在 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;
void Start()
{
block = new MaterialPropertyBlock();
}
void Update()
{
// red mesh
block.SetColor("_Color", Color.red);
Graphics.DrawMesh(mesh, new Vector3(0, 0, 0), Quaternion.identity, material, 0, null, 0, block);
// green mesh
block.SetColor("_Color", Color.green);
Graphics.DrawMesh(mesh, new Vector3(5, 0, 0), Quaternion.identity, material, 0, null, 0, block);
// blue mesh
block.SetColor("_Color", Color.blue);
Graphics.DrawMesh(mesh, new Vector3(-5, 0, 0), Quaternion.identity, material, 0, null, 0, block);
}
}
采用 nameID
的函数变体会更快。如果要使用相同名称反复更改属性,
则使用 Shader.PropertyToID 获取该名称的唯一标识符,然后将该标识符传递给 SetColor。
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(0, 0, 0), Quaternion.identity, material, 0, null, 0, block);
// green mesh
block.SetColor(colorID, Color.green);
Graphics.DrawMesh(mesh, new Vector3(5, 0, 0), Quaternion.identity, material, 0, null, 0, block);
// blue mesh
block.SetColor(colorID, Color.blue);
Graphics.DrawMesh(mesh, new Vector3(-5, 0, 0), Quaternion.identity, material, 0, null, 0, block);
}
}
另请参阅:SetFloat、SetVector、SetMatrix、SetTexture。