这篇文章给大家分享的是有关unity中如何实现UGUI遮罩流光特效的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
下面是核心shader:
Shader "UI/Unlit/Flowlight"{ Properties { [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} _Color("Tint", Color) = (1, 1, 1, 1) [MaterialToggle] _OffSet("OffSet", float) = 0 [MaterialToggle] PixelSnap("Pixel snap", float) = 0 /* Flowlight */ _FlowlightMaskTex("Mask Texture", 2D) = "white" {} _FlowlightTex("Add Move Texture", 2D) = "white" {} _FlowlightColor("Flowlight Color", Color) = (0, 0, 0, 1) _Power("Power", float) = 1 _SpeedX("SpeedX", float) = 1 _SpeedY("SpeedY", float) = 0 /* --------- */ /* UI */ _StencilComp("Stencil Comparison", Float) = 8 _Stencil("Stencil ID", Float) = 0 _StencilOp("Stencil Operation", Float) = 0 _StencilWriteMask("Stencil Write Mask", Float) = 255 _StencilReadMask("Stencil Read Mask", Float) = 255 /* -- */ } SubShader { Tags { "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" "PreviewType" = "Plane" "CanUseSpriteAtlas" = "True" } Cull Off Lighting Off ZWrite Off Blend One OneMinusSrcAlpha /* UI */ Stencil { Ref[_Stencil] Comp[_StencilComp] Pass[_StencilOp] ReadMask[_StencilReadMask] WriteMask[_StencilWriteMask] } /* -- */ Pass { CGPROGRAM#pragma vertex vert#pragma fragment frag#pragma multi_compile _ PIXELSNAP_ON#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; /* Flowlight */ half2 texflowlight : TEXCOORD1; /* --------- */ }; fixed4 _Color; /* Flowlight */ fixed4 _FlowlightColor; float _Power; sampler2D _FlowlightTex; fixed4 _FlowlightTex_ST; sampler2D _FlowlightMaskTex; fixed4 _FlowlightMaskTex_ST; fixed _SpeedX; fixed _SpeedY; fixed x = 0; float _OffSet; /* --------- */ v2f vert(appdata_t IN) { v2f OUT; OUT.vertex = mul(UNITY_MATRIX_MVP, IN.vertex); OUT.texcoord = IN.texcoord; /* Flowlight */ OUT.texflowlight = TRANSFORM_TEX(IN.texcoord, _FlowlightTex); OUT.texflowlight.x += _Time * _SpeedX; OUT.texflowlight.y += _Time * _SpeedY; OUT.color = IN.color * _Color;#ifdef PIXELSNAP_ON OUT.vertex = UnityPixelSnap(OUT.vertex);#endif return OUT; } sampler2D _MainTex; fixed4 frag(v2f IN) : SV_Target { fixed4 c = tex2D(_MainTex, IN.texcoord)*IN.color; fixed4 cmask = tex2D(_FlowlightMaskTex, IN.texcoord); if (cmask.a != 0) { /* Flowlight */ fixed4 cadd = tex2D(_FlowlightTex, IN.texflowlight) * _Power; cadd.rgb *= c.rgb; c.rgb += cadd.rgb; } c.rgb *= c.a; /* --------- */ return c; } ENDCG } }}
感谢各位的阅读!关于“unity中如何实现UGUI遮罩流光特效”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/u/4589456/blog/4584527