Version: 6000.3
语言: 中文
向着色器添加材质属性
添加材质属性

材料特性介绍

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

如果使用材料属性:

  • 您可以在着色器在 GPU 上运行的程序。更多信息
    请参阅术语表
    对象,方法是调用材质上的函数(例如 Material.SetFloat)。
  • 您可以使用材质查看和编辑值检查器一个 Unity 窗口,显示有关当前选定游戏对象、资产或项目设置的信息,允许您检查和编辑值。更多信息
    请参阅术语表
    .
  • Unity 将您所做的更改保存为材质资产的一部分,以便它们在会话之间保留。

如果不使用材料属性:

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

通常不会创建材质属性的唯一情况是,如果要完全使用脚本一段代码,允许您创建自己的组件、触发游戏事件、随时间修改组件属性以及以您喜欢的任何方式响应用户输入。更多信息
请参阅术语表
(例如,如果您正在制作程序内容),如果无法将属性转换为材质属性,或者您不希望在检查器中编辑它们。

如何向着色器提供属性值

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

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

序列化和运行时材质属性

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

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

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

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