Version: 2021.3
public void SetColor (string name, Color value);
public void SetColor (int nameID, Color value);

参数

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

另请参阅:SetFloatSetVectorSetMatrixSetTexture