Toggle shader keywords in the Editor
Add material properties for shader keywords.
読み終わるまでの所要時間 2 分最終更新 1ヶ月前
To toggle shader keywords in the Editor, add a material property for the keyword. This allows you to set different keyword states for different materials without needing to use code.
Follow these steps:
-
Addto the end of the keyword you declare. For example, change
_ONto_RED. Make sure you update your branching code to use the new name._RED_ON -
Make sure you or Unity declare state for when the keyword is off. For more information, refer to Branch when all keywords in a set are disabled.For example, if you useto declare only one keyword, Unity creates the 'off' state automatically.
shader_feature -
Add an integer material property with the attribute, and the name of the keyword without
[Toggle]. For example:_ONProperties { [Toggle] _RED ("Make red", Integer) = 0 }
Now when you create a material that uses the shader, the Inspector window of the material has a checkbox that enables or disables the keyword.
To disable the property by default, use instead of .
[ToggleOff][Toggle]Toggle keyword sets
To toggle keywords in a set so they're mutually exclusive, add a property with the attribute . Unity creates a dropdown with all the keywords. When you enable one keyword in the set, Unity disables the others.
KeywordEnumFollow these steps:
-
Declare the keyword set in the format. For example:
SETNAME_KEYWORDNAME#pragma shader_feature _COLOR_RED _COLOR_GREEN _COLOR_BLUE -
Add a material property with the attributeand the name of the keyword set. Pass in the names of the keywords. For example:
[KeywordEnum]Properties{ [KeywordEnum(RED, GREEN, BLUE)] _COLOR ("Color", Integer) = 0}
For more information and examples, refer to the MaterialPropertyDrawer API.
Example
The following example adds a property called , which enables and disables the keyword .
_RED_RED_ONShader "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 } }}