版本: Unity 6 (6000.0)
语言英语
  • C#

MaterialPropertyBlock.SetColor

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交,但我们确实阅读了用户提出的每个建议更改,并在适用情况下进行更新。

关闭

提交失败

由于某些原因,您的建议更改无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

声明

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

其他资源:SetFloatSetVectorSetMatrixSetTexture