参考链接:
https://blog.csdn.net/e295166319/article/details/60141677
https://docs.unity3d.com/ScriptReference/MaterialPropertyDrawer.html
1.Toggle
a.[Toggle] _Invert ("Invert?", Float) = 0
勾选时,表示使shader关键字_INVERT_ON生效,关键字格式为:name_ON(全部大写)
取消勾选时,表示使对应的关键字失效
要注意的是,这个关键字是要去定义的,否则Toggle无效
1 Shader "Custom/TestMaterialProperty" 2 { 3 Properties 4 { 5 [Toggle] _Invert ("Invert?", Float) = 0 6 } 7 SubShader 8 { 9 Pass 10 { 11 CGPROGRAM 12 #pragma vertex vert 13 #pragma fragment frag 14 #pragma multi_compile __ _INVERT_ON 15 16 #include "UnityCG.cginc" 17 18 struct appdata 19 { 20 float4 vertex : POSITION; 21 }; 22 23 struct v2f 24 { 25 float4 vertex : SV_POSITION; 26 }; 27 28 v2f vert (appdata v) 29 { 30 v2f o; 31 o.vertex = mul(UNITY_MATRIX_MVP, v.vertex); 32 return o; 33 } 34 35 fixed4 frag (v2f i) : SV_Target 36 { 37 fixed4 col = fixed4(1, 0, 0, 0); 38 #ifdef _INVERT_ON 39 col = fixed4(0, 1, 0, 0); 40 #endif 41 return col; 42 } 43 ENDCG 44 } 45 } 46 }
效果如下,来回勾选就可以看到颜色在切换了
b.[Toggle(ENABLE_FANCY)] _Fancy ("Fancy?", Float) = 0
勾选时,表示使shader关键字ENABLE_FANCY生效
取消勾选时,表示使对应的关键字失效
1 Shader "Custom/TestMaterialProperty" 2 { 3 Properties 4 { 5 [Toggle(ENABLE_FANCY)] _Fancy ("Fancy?", Float) = 0 6 } 7 SubShader 8 { 9 Pass 10 { 11 CGPROGRAM 12 #pragma vertex vert 13 #pragma fragment frag 14 #pragma multi_compile __ ENABLE_FANCY 15 16 #include "UnityCG.cginc" 17 18 struct appdata 19 { 20 float4 vertex : POSITION; 21 }; 22 23 struct v2f 24 { 25 float4 vertex : SV_POSITION; 26 }; 27 28 v2f vert (appdata v) 29 { 30 v2f o; 31 o.vertex = mul(UNITY_MATRIX_MVP, v.vertex); 32 return o; 33 } 34 35 fixed4 frag (v2f i) : SV_Target 36 { 37 fixed4 col = fixed4(1, 0, 0, 0); 38 #ifdef ENABLE_FANCY 39 col = fixed4(0, 1, 0, 0); 40 #endif 41 return col; 42 } 43 ENDCG 44 } 45 } 46 }
2.KeywordEnum
[KeywordEnum(None, Add, Multiply)] _Overlay ("Overlay mode", Float) = 0
当选择None时,表示使shader关键字_OVERLAY_NONE生效,关键字格式为:属性名_枚举名(全部大写)
1 Shader "Custom/TestMaterialProperty" 2 { 3 Properties 4 { 5 [KeywordEnum(None, Add, Multiply)] _Overlay ("Overlay mode", Float) = 0 6 } 7 SubShader 8 { 9 Pass 10 { 11 CGPROGRAM 12 #pragma vertex vert 13 #pragma fragment frag 14 #pragma multi_compile _OVERLAY_NONE _OVERLAY_ADD _OVERLAY_MULTIPLY 15 16 #include "UnityCG.cginc" 17 18 struct appdata 19 { 20 float4 vertex : POSITION; 21 }; 22 23 struct v2f 24 { 25 float4 vertex : SV_POSITION; 26 }; 27 28 v2f vert (appdata v) 29 { 30 v2f o; 31 o.vertex = mul(UNITY_MATRIX_MVP, v.vertex); 32 return o; 33 } 34 35 fixed4 frag (v2f i) : SV_Target 36 { 37 fixed4 col = fixed4(1, 1, 1, 1); 38 #if _OVERLAY_NONE 39 col = fixed4(1, 0, 0, 1); 40 #elif _OVERLAY_ADD 41 col = fixed4(0, 1, 0, 1); 42 #elif _OVERLAY_MULTIPLY 43 col = fixed4(0, 0, 1, 1); 44 #endif 45 return col; 46 } 47 ENDCG 48 } 49 } 50 }
效果如下,选择不同的选项即显示不同的颜色
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?