版本:Unity 6 (6000.0)
语言:English
向着色器添加材质属性
添加材质属性

材质属性简介

在您的ShaderLabUnity 用于定义着色器对象结构的语言。 更多信息
参见 术语表
代码中,您可以定义材质属性。材质属性是 Unity 作为材质资源的一部分存储的属性。这允许美术师创建、编辑和共享具有不同配置的材质。

如果您使用材质属性

  • 您可以通过调用材质上的函数(例如 Material.SetFloat)获取或设置 着色器在 GPU 上运行的程序。 更多信息
    参见 术语表
    对象中变量的值。
  • 您可以使用材质检查器一个 Unity 窗口,显示有关当前选定的游戏对象、资源或项目设置的信息,允许您检查和编辑值。 更多信息
    参见 术语表
    查看和编辑这些值。
  • Unity 会将您所做的更改保存为材质资源的一部分,因此它们会在会话之间持续存在。

如果您不使用材质属性

  • 您仍然可以通过调用材质上的函数获取或设置 着色器对象Shader 类的实例,着色器对象是着色器程序和 GPU 指令以及告知 Unity 如何使用它们的容器。将它们与材质一起使用以确定场景的外观。 更多信息
    参见 术语表
    中变量的值。
  • 这些值没有可视化编辑器。
  • 更改不会在会话之间持续存在。

您通常创建材质属性的唯一情况是,如果您希望完全使用脚本一段代码,允许您创建自己的组件、触发游戏事件、随着时间的推移修改组件属性并以任何您喜欢的方式响应用户输入。 更多信息
参见 术语表
设置着色器属性值(例如,如果您正在创建程序内容),如果属性无法制作为材质属性,或者如果您不希望在检查器中对其进行编辑。

如何向着色器提供属性值

着色器属性值从以下位置找到并提供给着色器

优先级顺序如上所述:每个实例数据覆盖所有内容;然后使用材质数据;最后,如果着色器属性在这两个位置都不存在,则使用全局属性值。最后,如果任何地方都没有定义着色器属性值,则将提供“默认”值(浮点数为零,颜色为黑色,纹理为空白纹理)。

序列化和运行时材质属性

材质 可以包含序列化和运行时设置的属性值。

序列化数据是着色器 Properties 块中定义的所有属性。通常,这些是需要存储在材质中的值,并且用户可以在材质检查器中对其进行调整。

材质还可以具有一些着色器使用的属性,但未在着色器的 Properties 块中声明。通常,这用于在运行时从脚本代码设置的属性,例如通过 Material.SetColor。请注意,矩阵和数组只能作为非序列化的运行时属性存在(因为无法在 Properties 块中定义它们)。

向着色器添加材质属性
添加材质属性