MaterialPropertyBlock.SetColor
Declaration
public void SetColor(string name, Color value);public void SetColor(int nameID, Color value);Параметры
| Параметр | Описание |
|---|---|
| имя | Название свойства. |
| nameID | Имя ID свойства, полученного Shader.PropertyToID. |
| значение | Значение Color для установки. |
Описание
Установить свойство цвета.
Добавляет свойство к блоку. Если свойство цвета с указанным именем уже существует, старое значение заменяется.
Метод предполагает, что значение цвета находится в пространстве sRGB. Метод преобразует значение в линейное цветовое пространство, если активное цветовое пространство проекта является линейным.
Если вы переключитесь между цветовыми пространствами в вашем проекте, Unity не преобразует значения цветов автоматически. Вы должны сами обработать преобразование.
Метод `SetColor` не поддерживает установку цветов HDR напрямую.
Для установки цветов HDR используйте вместо этого MaterialPropertyBlock.SetVector, передавая Vector4, где компоненты RGB представляют цвет HDR, а компонент W является альфа-значением.
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,.