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

MaterialPropertyBlock

UnityEngine 中的类

/

实现于:UnityEngine.CoreModule

建议更改

成功!

感谢您帮助我们改进 Unity 文档的质量。虽然我们无法接受所有提交内容,但我们会阅读用户提出的每个建议,并在适用时进行更新。

关闭

提交失败

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

关闭

取消

描述

要应用的材质值块。

MaterialPropertyBlock 由 Graphics.RenderMeshRenderer.SetPropertyBlock 使用。在您想要使用相同的材质绘制多个对象,但属性略有不同的情况下使用它。例如,如果您想略微更改每个绘制网格的颜色。不支持更改渲染状态。

Unity 的地形引擎使用 MaterialPropertyBlock 来绘制树木;它们都使用相同的材质,但每棵树都有不同的颜色、比例和风力系数。

传递给 Graphics.RenderMeshRenderer.SetPropertyBlock 的块将被复制,因此使用它的最有效方法是创建一个块并将其重复用于所有 DrawMesh 调用。使用 SetFloatSetVectorSetColorSetMatrixSetTextureSetBuffer 来添加或替换值。

请注意,这与 SRP Batcher 不兼容。在通用渲染管线 (URP)、高清渲染管线 (HDRP) 或基于可脚本化渲染管线 (SRP) 的自定义渲染管线中使用它可能会导致性能下降。

以下示例使用 MaterialPropertyBlock 创建 10 个具有随机颜色的游戏对象。要使用该示例,请将预制件附加到 myPrefab 属性。

其他资源: Graphics.RenderMeshMaterial.

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此函数将整个源数组复制到名为 unity_ProbesOcclusion 的 Vector4 属性数组中,以用于实例阴影掩码渲染。
CopySHCoefficientArraysFrom此函数将整个源数组转换为 7 个 Vector4 属性数组,并将其复制到名为 unity_SHAr、unity_SHAg、unity_SHAb、unity_SHBr、unity_SHBg、unity_SHBb 和 unity_SHC 的数组中,以用于实例光探针渲染。
GetColor从属性块中获取颜色。
GetFloat从属性块中获取浮点数。
GetFloatArray从属性块中获取浮点数数组。
GetInt此方法已弃用。请改用 GetFloat 或 GetInteger。
GetInteger从属性块中获取整数。
GetMatrix从属性块中获取矩阵。
GetMatrixArray从属性块中获取矩阵数组。
GetTexture从属性块中获取纹理。
GetVector从属性块中获取向量。
GetVectorArray从属性块中获取向量数组。
HasBuffer检查 MaterialPropertyBlock 是否具有具有给定名称或名称 ID 的 ComputeBuffer 属性。要设置属性,请使用 SetBuffer。
HasColor检查 MaterialPropertyBlock 是否具有具有给定名称或名称 ID 的 Color 属性。要设置属性,请使用 SetColor。
HasConstantBuffer检查 MaterialPropertyBlock 是否具有具有给定名称或名称 ID 的 ConstantBuffer 属性。要设置属性,请使用 SetConstantBuffer。
HasFloat检查 MaterialPropertyBlock 是否具有具有给定名称或名称 ID 的 Float 属性。要设置属性,请使用 SetFloat。
HasInt此方法已弃用。请改用 HasFloat 或 HasInteger。
HasInteger检查 MaterialPropertyBlock 是否具有具有给定名称或名称 ID 的 Integer 属性。要设置属性,请使用 SetInteger。
HasMatrix检查 MaterialPropertyBlock 是否具有具有给定名称或名称 ID 的 Matrix 属性。这也适用于 Matrix 数组属性。要设置属性,请使用 SetMatrix。
HasProperty检查 MaterialPropertyBlock 是否具有具有给定名称或名称 ID 的属性。要设置属性,请使用 MaterialPropertyBlock 的 Set 方法之一。
HasTexture检查 MaterialPropertyBlock 是否具有具有给定名称或名称 ID 的 Texture 属性。要设置属性,请使用 SetTexture。
HasVector检查 MaterialPropertyBlock 是否具有具有给定名称或名称 ID 的 Vector 属性。这也适用于 Vector 数组属性。要设置属性,请使用 SetVector。
SetBuffer设置缓冲区属性。
SetColor设置颜色属性。
SetConstantBuffer将 ComputeBuffer 或 GraphicsBuffer 设置为 MaterialPropertyBlock 的命名常量缓冲区。
SetFloat设置浮点数属性。
SetFloatArray设置浮点数数组属性。
SetInt此方法已弃用。请改用 SetFloat 或 SetInteger。
SetInteger向块中添加属性。如果具有给定名称的整数属性已存在,则将替换旧值。
SetMatrix设置矩阵属性。
SetMatrixArray设置矩阵数组属性。
SetTexture设置纹理属性。
SetVector设置向量属性。
SetVectorArray设置向量数组属性。