Version: Unity 6.0 (6000.0)
语言 : 中文
使着色器行为以关键字为条件
在脚本中切换和检查着色器关键字

将着色器关键字添加到检视面板窗口中

在 Unity 编辑器 (Editor) 中,在材质检视面板中查看材质时,可以启用和禁用其本地着色器关键字。它之所以有用,有两个原因:

  • 它可以让美术师为不同的材质轻松设置不同的关键字值,而无需使用代码。
  • 使用 [KeywordEnum] MaterialPropertyDrawer 启用关键字时,Unity 会自动禁用一个组集中的其他关键字。这样可以确保在任何时候仅启用一组关键字中的一个。

与任何着色器设置或数据一样,仅当着色器关键字在着色器源文件中声明为材质属性时,这些关键字才在材质检视面板 (Inspector) 中可用。

对于在 Shader Graph 中创建的着色器,默认情况下,关键字是材质属性。这意味着这些设置会在材质检视面板中自动可用。要更改此属性,请打开黑板 (Blackboard),然后更改 Exposed 属性。

对于手动编码的着色器,必须确保__ ShaderLab__Unity 用于定义着色器对象结构的语言。更多信息
See in Glossary
代码定义了表示关键字集的材质属性。材质属性必须是 Float 类型,并且必须使用 [Toggle][ToggleOff][KeywordEnum] MaterialPropertyDrawer 属性才能将其正确暴露给检视面板。

以下示例添加了一个名为 Make Red 的开关,用于启用和禁用关键字 _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 的文档。

其他资源

使着色器行为以关键字为条件
在脚本中切换和检查着色器关键字