在 Unity Editor 中,当你查看材质中的材质 首选项一个 Unity 窗口,显示有关当前所选游戏对象、资源或项目设置的信息,允许你检查并编辑值。了解更多信息
在 术语表 中查看 时,你可以启用和停用其本地 着色器在 GPU 上运行的程序。了解更多信息
在 术语表 中查看 关键字。这样做有两个原因
[KeywordEnum]
MaterialPropertyDrawer 启用某个关键字时,Unity 会自动停用某个集合中的其他关键字。这可以确保任何时候集合中只有一个关键字被启用。如同任何着色器设置或数据一样,当着色器关键字在着色器源文件中作为 材质属性 声明时,它们才在材质首选项中可用。
对于在 Shader Graph 中创建的着色器,关键字默认是材质属性。这意味着这些设置自动在材质首选项中可用。要更改它,请打开 黑板,并更改公开属性。
对于手写代码着色器,你必须确保你的 ShaderLabUnity 用于定义着色器对象结构的语言。了解更多信息
在 术语表 中查看 代码定义了表示关键字集合的 材质属性。材质属性必须为 Float
类型,并且必须使用 [Toggle]
、[ToggleOff]
或 [KeywordEnum]
MaterialPropertyDrawer 属性将它正确地公开到首选项中。
以下示例添加了一个名为变红的切换按钮,它启用并停用关键字 _RED_ON
。
Shader "Unlit/ToggleRed"
{
Properties
{
[Toggle] _RED ("Make red", Float) = 0
}
SubShader
{
Tags { "RenderType"="Opaque" }
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
// Add the keyword RED_ON, for when the toggle is on
// Unity automatically adds a keyword for when the toggle is off
#pragma shader_feature _RED_ON
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
};
struct v2f
{
float4 vertex : SV_POSITION;
};
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
return o;
}
fixed4 frag (v2f i) : SV_Target
{
// Return red if the toggle is on
#if _RED_ON
return fixed4(1, 0, 0, 1);
#else
return fixed4(0, 0, 0, 1);
#endif
}
ENDCG
}
}
}
更多有关信息和示例,请参阅 MaterialPropertyDrawer API 的文档。