UGUI(十四)image图片变灰效果

标签:
ugui变灰 |
分类: UGUI |
昨天群里有网友问在UGUI上如何让图片变灰,其实这个需求我们项目以后也会有,所以趁有空就捣鼓了一下。
UGUI的image组件上有材质球插槽,那么很显然可以从这里入手,然后编写shader,挂载上去效果就出来了。
原图:
http://s8/mw690/002wvREMgy6RcYPUsv567&690
灰色效果:
http://s2/mw690/002wvREMgy6RcYQsGul61&690
Blending的渲染顺序:
http://s2/mw690/002wvREMgy6Rd06GM1zf1&690
新建一个shader,增加融合和变灰的代码即可。
通过这样的一个小例子,可以发现UGUI比NGUI在处理UI界面时,更容易通过shader去做一些效果。
shader代码:
-
Shader
"UI/Default Grey" -
{
-
Properties -
{ -
[PerRendererData] _MainTex ("Sprite Texture" ,2D) "white"= {} -
_Color ("Tint", Color) 1,1,1,1)= ( -
} -
-
SubShader -
{ -
Tags -
{ -
"Queue"="Transparent" -
"IgnoreProjector"="True" -
"RenderType"="Transparent" -
"PreviewType"="Plane" -
"CanUseSpriteAtlas"="True" -
} -
// 源rgba*源a + 背景rgba*(1-源A值) -
Blend SrcAlpha OneMinusSrcAlpha -
-
Pass -
{ -
CGPROGRAM -
#pragma vertex vert -
#pragma fragment frag -
#include "UnityCG.cginc" -
-
struct appdata_t -
{ -
float4 vertex : POSITION; -
float4 color : COLOR; -
float2 texcoord : TEXCOORD0; -
}; -
-
struct v2f -
{ -
float4 vertex : SV_POSITION; -
fixed4 color : COLOR; -
half2 texcoord : TEXCOORD0; -
}; -
-
sampler2D _MainTex; -
fixed4 _Color; -
-
v2f vert(appdata_t IN) -
{ -
v2f OUT; -
OUT.vertex = mul(UNITY_MATRIX_MVP, IN.vertex); -
OUT.texcoord = IN.texcoord; -
#ifdef
UNITY_HALF_TEXEL_OFFSET -
OUT.vertex.xy -= (_ScreenParams.zw-1.0); -
#endif
-
OUT.color = IN.color * _Color; -
return OUT; -
} -
-
fixed4 frag(v2f IN) : SV_Target -
{ -
half4 color = tex2D(_MainTex, IN.texcoord) * IN.color; -
float grey 0.22,= dot(color.rgb, fixed3( 0.707, 0.071)); -
return half4(grey,grey,grey,color.a); -
} -
ENDCG -
} -
} - }
-
刚才秒杀了这个需求,要是去年的这个时候就没法秒杀。
临时来了一个感悟吧,学习离不开所在的圈子,离不开大神们的指引。
吃水不忘挖井人,感谢大大们。