Unity 에디터에서는 머티리얼 인스펙터에서 머티리얼을 확인할 때 머티리얼의 로컬 셰이더 키워드를 활성화하거나 비활성화할 수 있습니다. 이는 다음 두 가지 이유로 유용합니다.
[KeywordEnum] MaterialPropertyDrawer를 사용하여 키워드를 활성화하면 Unity는 세트의 다른 키워드를 자동으로 비활성화합니다. 이렇게 하면 세트의 키워드가 언제든지 정확히 하나씩 활성화됩니다.모든 셰이더 설정 또는 데이터와 마찬가지로, 셰이더 키워드는 셰이더 소스 파일에서 머티리얼 프로퍼티로 선언된 경우에만 머티리얼 인스펙터에 제공됩니다.
셰이더 그래프에서 생성된 셰이더의 경우 키워드는 기본적으로 머티리얼 프로퍼티입니다. 즉 이러한 설정은 머티리얼 인스펙터에 자동으로 제공되지 않습니다. 이를 변경하려면 Blackboard를 열고 Exposed 프로퍼티를 변경합니다.
직접 코딩한 셰이더의 경우__ ShaderLab__셰이더 오브젝트의 구조를 정의하기 위한 Unity 언어입니다. 자세한 정보
See in Glossary 코드가 키워드 세트를 나타내는 머티리얼 프로퍼티를 정의해야 합니다. 머티리얼 프로퍼티에는 Float 유형이 있어야 하며, [Toggle], [ToggleOff] 또는 [KeywordEnum] MaterialPropertyDrawer 속성을 사용하여 인스펙터에 올바르게 노출해야 합니다.
다음 예시에서는 _RED_ON 키워드를 활성화하거나 비활성화하는 Make Red라는 토글을 추가합니다.
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에 대한 기술 자료를 참조하십시오.