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

MaterialPropertyBlock

класс в UnityEngine

Выполнено в:UnityEngine.CoreModule

Описание

Блок значений материалов для применения.

MaterialPropertyBlock используется Graphics.RenderMesh и Renderer.SetPropertyBlock. Применяйте это, когда нужно отрисовать несколько объектов с одним материалом, но слегка разными свойствами, — например, немного изменить цвет каждого отрисованного меша. Состояние не поддерживается.

Unity'с местности двигатель использует MaterialPropertyBlock рисовать деревья; все они используют один и тот же материал, но каждое дерево имеет разный цвет, масштаб и фактор ветра.

Блок перешел к Graphics.RenderMesh или Renderer.SetPropertyBlock копируется, так что наиболее эффективным способом использования его является создание одного блока и повторное использование его для всех DrawMesh звонки. Использование SetFloat, SetVector, SetColor, SetMatrix, SetTexture, SetBuffer для добавления или замены значений.

Обратите внимание, что это несовместимо с SRP Дозатор. Использование этого в Universal Render Pipeline (URP), High Definition Render Pipeline (HDRP) или пользовательский конвейер отображения на основе Scriptable Render Pipeline (SRP) может привести к снижению производительности.

Следующий пример создает 10 GameObjects со случайными цветами, используя MaterialPropertyBlock. Для использования примера приложить префаб к Генеральной Ассамблее myPrefab свойства.

Дополнительные ресурсы: Graphics.RenderMesh, Material.

using UnityEngine;

public class CreateTenGameObjects : MonoBehaviour { public GameObject myPrefab;

void Start() { // Loop through 10 GameObjects for (int i = 0; i < 10; i++) { // Instantiate a new GameObject at a unique position GameObject newObject = Instantiate(myPrefab, new Vector3(i * 2f, 0, 0), Quaternion.identity);

// Create a new MaterialPropertyBlock MaterialPropertyBlock propertyBlock = new MaterialPropertyBlock();

// Set a random color in the MaterialPropertyBlock propertyBlock.SetColor("_Color", Random.ColorHSV());

// Apply the MaterialPropertyBlock to the GameObject newObject.GetComponent<MeshRenderer>().SetPropertyBlock(propertyBlock); } } }

Свойства

Свойство Описание
isEmptyБлок свойств материала пуст? (только для чтения)

Открытые методы

Метод Описание
ClearЯсные значения свойств материала.
CopyProbeOcclusionArrayFromЭта функция копирует весь исходный массив в массив свойств Vector4 с именем unity_ProbesOcclusion для использования с инстанционированным отображением Shadowmask.
CopySHCoefficientArraysFromЭта функция преобразует и копирует весь исходный массив в 7 массивов свойств Vector4, именуемых unity_SHAr, unity_SHAg, unity_SHAb, unity_SHBr, unity_SHBg, unity_SHBb и unity_SHC для использования с инстанционированным рендерингом светового зонда.
GetColorПолучить цвет из блока свойств.
GetFloatПолучить float из блока свойств.
GetFloatArrayПолучить массив с плавающей запятой из блока свойств.
GetIntЭтот метод устарел. Используйте вместо него GetFloat или GetInteger.
GetIntegerПолучить целое число из блока свойств.
GetMatrixПолучить матрицу из блока свойств.
GetMatrixArrayПолучить массив матриц из блока свойств.
GetTextureПолучить текстуру из блока свойств.
GetVectorПолучить вектор из блока свойств.
GetVectorArrayПолучить векторный массив из блока свойств.
HasBufferПроверяет, имеет ли MaterialPropertyBlock свойство ComputeBuffer с заданным именем или имя ID. Для установки свойства используйте SetBuffer.
HasColorПроверяет, имеет ли MaterialPropertyBlock свойство Color с заданным именем или именем ID. Для установки свойства используйте SetColor.
HasConstantBufferПроверяет, имеет ли MaterialPropertyBlock свойство ConstantBuffer с заданным именем или имя ID. Для установки свойства используйте SetConstantBuffer.
HasFloatПроверяет, имеет ли MaterialPropertyBlock свойство Float с заданным именем или именем ID. Для установки свойства используйте SetFloat.
HasIntЭтот метод устарел. Используйте вместо него HasFloat или HasInteger.
HasIntegerПроверяет, имеет ли MaterialPropertyBlock свойство Integer с заданным именем или именем ID. Для установки свойства используйте SetInteger.
HasMatrixПроверяет, имеет ли MaterialPropertyBlock свойство Matrix с заданным именем или именем ID. Это также работает со свойством Matrix Array. Чтобы установить свойство, используйте SetMatrix.
HasPropertyПроверяет, имеет ли MaterialPropertyBlock свойство с заданным именем или именем ID. Чтобы установить свойство, используйте один из методов Set для MaterialPropertyBlock.
HasTextureПроверяет, имеет ли MaterialPropertyBlock свойство Texture с заданным именем или именем ID. Для установки свойства используйте SetTexture.
HasVectorПроверяет, имеет ли MaterialPropertyBlock свойство Vector с заданным именем или именем ID. Это также работает со свойством Vector Array. Чтобы установить свойство, используйте SetVector.
SetBufferУстановить свойство буфера.
SetColorУстановить свойство цвета.
SetConstantBufferУстанавливает ComputeBuffer или GraphicsBuffer в качестве именованного постоянного буфера для MaterialPropertyBlock.
SetFloatУстановить свойство float.
SetFloatArrayУстановить свойство массива с плавающей запятой.
SetIntЭтот метод устарел. Используйте вместо него SetFloat или SetInteger.
SetIntegerДобавляет свойство к блоку. Если целое свойство с указанным именем уже существует, то старое значение заменяется.
SetMatrixУстанавливает свойство матрицы.
SetMatrixArrayУстанавливает свойство массива матрицы.
SetTextureУстанавливает свойство текстуры.
SetVectorУстанавливает свойство вектора.
SetVectorArrayУстанавливает свойство векторного массива.