Unity 6.3
0 онлайн 3 гостей 3 в системе
Вход

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,.