Shader Texture中指定具体颜色进行高亮显示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | 实现: 高亮一张texture上相同颜色的色块。<br>原理:使用step进行rgb的对比即可。<br><br><br><br>Shader "Unlit/ChooseContinent" { //2018年4月8日 //for ui地图高亮所有相同的颜色块 Properties { _MainTex( "Texture" , 2D) = "white" {} _SwitchColor( "SwitchColor" ,Int) = 0 //高光还是直接返回 _HighlightColor( "HighlightColor" ,Color) = (0.498,1,0,0.3) //高光颜色 _ChooseR( "ChooseR" ,Int) = 255 //点击选择的颜色值 _ChooseG( "ChooseG" ,Int) = 255 _ChooseB( "ChooseB" ,Int) = 255 _ThresholdValue( "ThresholdValue" ,Int) = 10 //判断范围的阀值 _VertexOffset( "VertexOffset" ,Vector) = (5,-15,0,0) //顶点偏移 } SubShader { Tags { "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" "PreviewType" = "Plane" "CanUseSpriteAtlas" = "True" } Cull Back Lighting Off ZWrite Off ZTest Off Blend SrcAlpha OneMinusSrcAlpha Pass { Name "Default" CGPROGRAM #pragma vertex vert #pragma fragment frag #pragma target 2.0 #include "UnityCG.cginc" #include "UnityUI.cginc" struct appdata_t { float4 vertex : POSITION; float4 color : COLOR; float2 texcoord : TEXCOORD0; UNITY_VERTEX_INPUT_INSTANCE_ID }; struct v2f { float4 vertex : SV_POSITION; fixed4 color : COLOR; float2 texcoord : TEXCOORD0; float4 worldPosition : TEXCOORD1; UNITY_VERTEX_OUTPUT_STEREO }; float4 _VertexOffset; v2f vert(appdata_t IN) { v2f OUT; UNITY_SETUP_INSTANCE_ID(IN); UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(OUT); OUT.worldPosition = IN.vertex; OUT.vertex = UnityObjectToClipPos(OUT.worldPosition) - _VertexOffset; OUT.texcoord = IN.texcoord; return OUT; } sampler2D _MainTex; float _SwitchColor; float _Alpha; float4 _ChooseColor; float4 _HighlightColor; int _ChooseR; int _ChooseG; int _ChooseB; int _ThresholdValue; float4 frag(v2f IN) : SV_Target { if (_SwitchColor == 0) { return 0; } // sample the texture float4 col = tex2D(_MainTex, IN.texcoord); return step( 3 , step(abs(_ChooseR - col.r * 255), _ThresholdValue) + step(abs(_ChooseG - col.g * 255), _ThresholdValue) + step(abs(_ChooseB - col.b * 255), _ThresholdValue) )*_HighlightColor; } ENDCG } } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!