写法
Properties { Property [Property ...]}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Shader "Test/Properties" { Properties { _MainTex ("Texture", 2D) = "white" {} _TestInt("TestInt",Int)=1 _TestFloat("TestFloat",Float)=2.0 _TestVector4("TestVector4",Vector)=(0,0,0,0) _TestColor("TestColor",Color) = (1,0,0,1) _TestRange("TestRange",Range(0,100))=100 _Test2D("Test2D",2D) = ""{} _TestCube("TestCube",Cube) = ""{} _Test3D("Test3D",3D) = ""{} } SubShader { Pass{} } } |

类型
数字和滑动条
1 2 3 |
name ("display name", Range (min, max)) = number name ("display name", Float) = number name ("display name", Int) = number |
颜色和矢量
1 2 |
name ("display name", Color) = (number,number,number,number) name ("display name", Vector) = (number,number,number,number) |
纹理
1 2 3 |
name ("display name", 2D) = "defaulttexture" {} name ("display name", Cube) = "defaulttexture" {} name ("display name", 3D) = "defaulttexture" {} |
详细信息
着色器中的每个属性均通过 name 引用(在 Unity 中,着色器属性名称通常以下划线开头)。属性在材质检视面板中将显示为 display name。每个属性都在等号后给出默认值:
- 对于 Range 和 Float 属性,默认值仅仅是单个数字,例如“13.37”。
- 对于 Color 和 Vector 属性,默认值是括在圆括号中的四个数字,例如“(1,0.5,0.2,1)”。
- 对于 2D 纹理,默认值为空字符串或内置默认纹理之一:“white”(RGBA:1,1,1,1)、“black”(RGBA:0,0,0,0)、“gray”(RGBA:0.5,0.5,0.5,0.5)、“bump”(RGBA:0.5,0.5,1,0.5)或“red”(RGBA:1,0,0,0)。
- 对于非 2D 纹理(立方体、3D 或 2D 数组),默认值为空字符串。如果材质未指定立方体贴图/3D/数组纹理,则使用灰色(RGBA:0.5,0.5,0.5,0.5)。
稍后在着色器的固定函数部分中,可使用括在方括号中的属性名称来访问属性值:[name]。例如,可通过声明两个整数属性(例如“SrcBlend“和”DstBlend”)来使混合模式由材质属性驱动,然后让 Blend 命令使用它们:Blend [_SrcBlend] [_DstBlend]。
Properties 代码块中的着色器参数被序列化为材质数据。着色器程序实际上可以有更多参数(如矩阵、矢量和浮点数),这些参数在运行时从代码中在材质上设置,但如果它们不是 Properties 代码块的一部分,则不会保存它们的值。这对于完全由脚本代码驱动的值最有用(使用 Material.SetFloat 和类似函数)。
特性
在属性前面,可指定可选的特性(用方括号括起)。这些是 Unity 可以识别的特性,或者它们可以指示您自己的 MaterialPropertyDrawer 类 来控制它们在材质检视面板中的呈现方式。Unity 可以识别的特性包括:
- [HideInInspector]- 不在材质检视面板中显示属性值。
- [NoScaleOffset]- 对于具有此特性的纹理属性,材质检视面板不会显示纹理平铺/偏移字段。
- [Normal] - 表示纹理属性需要法线贴图。
- [HDR] - 表示纹理属性需要高动态范围 (HDR) 纹理。
- [Gamma] - 表示在 UI 中将浮点/矢量属性指定为 sRGB 值(就像颜色一样),并且可能需要根据使用的颜色空间进行转换。请参阅着色器程序中的属性。
- [PerRendererData] - 表示纹理属性将以 MaterialPropertyBlock 的形式来自每渲染器数据。材质检视面板会更改这些属性的纹理字段 UI。
- [MainTexture] - 表示一个属性 (property) 是材质的主纹理。默认情况下,Unity 将属性 (property) 名称为 _MainTex 的纹理视为主纹理。如果您的纹理具有其他属性 (property) 名称,但您希望 Unity 将这个纹理视为主纹理,请使用此属性 (attribute)。如果您多次使用此属性 (attribute),则 Unity 会使用第一个属性 (property),而忽略后续属性 (property)。
- [MainColor] - 表示一个属性 (property) 是材质的主色。默认情况下,Unity 将属性 (property) 名称为 _Color 的颜色视为主色。如果您的颜色具有其他属性 (property) 名称,但您希望 Unity 将这个颜色视为主色,请使用此属性 (attribute)。如果您多次使用此属性 (attribute),则 Unity 会使用第一个属性 (property),而忽略后续属性 (property)。
- 本文固定链接: http://www.u3d8.com/?p=2552
- 转载请注明: 网虫虫 在 u3d8.com 发表过