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 | Устанавливает свойство векторного массива. |