Unity3D Ui利用shader添加效果
程序员文章站
2023-12-10 08:59:46
本文实例为大家分享了unity3d ui利用shader添加效果的具体代码,供大家参考,具体内容如下
// upgrade note: replaced...
本文实例为大家分享了unity3d ui利用shader添加效果的具体代码,供大家参考,具体内容如下
// upgrade note: replaced 'mul(unity_matrix_mvp,*)' with 'unityobjecttoclippos(*)' 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 = unityobjecttoclippos(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 } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。