name | 属性的名称。 |
nameID | 通过 Shader.PropertyToID 获取的属性的名称 ID。 |
value | 要设置的 Color 值。 |
设置颜色属性。
向块添加属性。如果已存在具有给定名称的颜色属性,则替换旧值。
颜色值被认为始终在 sRGB 空间中设置,如果活动颜色空间是线性空间,则将其转换为线性空间。如果在颜色空间之间切换,则需要手动更新颜色值。
using UnityEngine;
// Draws 3 meshes with the same material but with different colors. using UnityEngine; public class ExampleClass : MonoBehaviour { public Mesh mesh; public Material material; private MaterialPropertyBlock block;
void Start() { block = new MaterialPropertyBlock(); }
void Update() { // setup render params RenderParams rp = new RenderParams(material) {matProps = block};
// red mesh block.SetColor("_Color", Color.red); Graphics.RenderMesh(rp, mesh, 0, Matrix4x4.Translate(new Vector3(0, 0, 0)));
// green mesh block.SetColor("_Color", Color.green); Graphics.RenderMesh(rp, mesh, 0, Matrix4x4.Translate(new Vector3(5, 0, 0)));
// blue mesh block.SetColor("_Color", Color.blue); Graphics.RenderMesh(rp, mesh, 0, Matrix4x4.Translate(new Vector3(-5, 0, 0))); } }
使用 nameID
的函数变体速度更快。如果您要重复更改相同名称的属性,请使用 Shader.PropertyToID 获取名称的唯一标识符,并将标识符传递给 SetColor。
using UnityEngine;
// Draws 3 meshes with the same material but with different colors. using UnityEngine; public class ExampleClass : MonoBehaviour { public Mesh mesh; public Material material; private MaterialPropertyBlock block;
void Start() { block = new MaterialPropertyBlock(); }
void Update() { // setup render params RenderParams rp = new RenderParams(material) {matProps = block};
// red mesh block.SetColor("_Color", Color.red); Graphics.RenderMesh(rp, mesh, 0, Matrix4x4.Translate(new Vector3(0, 0, 0)));
// green mesh block.SetColor("_Color", Color.green); Graphics.RenderMesh(rp, mesh, 0, Matrix4x4.Translate(new Vector3(5, 0, 0)));
// blue mesh block.SetColor("_Color", Color.blue); Graphics.RenderMesh(rp, mesh, 0, Matrix4x4.Translate(new Vector3(-5, 0, 0))); } }
其他资源:SetFloat、SetVector、SetMatrix、SetTexture。