包含此页的版本:
不含此页的版本:
切换着色器在 GPU 上运行的程序。更多信息
请参阅术语表关键字,为关键字添加材质属性。这允许您为不同的材质设置不同的关键字状态,而无需使用代码。
按着这些次序:
加_ON到您声明的关键字的末尾。例如,更改_RED自_RED_ON.确保更新分支代码以使用新名称。
确保你或 Unity 声明关键字关闭时的状态。有关更多信息,请参阅禁用集合中所有关键字时的分支。
例如,如果使用shader_feature为了仅声明一个关键字,Unity 会自动创建“off”状态。
添加具有属性的整数材质属性[Toggle],关键字的名称没有_ON.例如:
Properties
{
[Toggle] _RED ("Make red", Integer) = 0
}
现在,当您创建使用着色器的材质时,材质的“检查器”窗口会有一个复选框,用于启用或禁用关键字。
要默认禁用该属性,请使用[ToggleOff]而不是[Toggle].
要切换集合中的关键字,使其互斥,请添加属性为KeywordEnum.Unity 会创建一个包含所有关键字的下拉列表。当您在集合中启用一个关键字时,Unity 会禁用其他关键字。
按着这些次序:
声明以SETNAME_KEYWORDNAME.例如:
#pragma shader_feature _COLOR_RED _COLOR_GREEN _COLOR_BLUE
添加具有属性的材质属性[KeywordEnum]以及关键字集的名称。传入关键字的名称。例如:
Properties
{
[KeywordEnum(RED, GREEN, BLUE)] _COLOR ("Color", Integer) = 0
}
有关更多信息和示例,请参阅 MaterialPropertyDrawer API。
以下示例添加了一个名为_RED,用于启用和禁用关键字_RED_ON.
Shader "Unlit/ToggleRed"
{
Properties
{
[Toggle] _RED ("Make red", Integer) = 0
}
SubShader
{
Tags { "RenderType"="Opaque" }
Pass
{
HLSLPROGRAM
#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
}
ENDHLSL
}
}
}