版本:Unity 6 (6000.0)
语言:英语
让着色器行为以关键字为条件
在脚本中切换着色器关键字

添加着色器关键字至首选项窗口

在 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 的文档。

其他资源

让着色器行为以关键字为条件
在脚本中切换着色器关键字