欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Unity3D Ui利用shader添加效果

程序员文章站 2023-11-17 14:44:16
本文实例为大家分享了unity3d ui利用shader添加效果的具体代码,供大家参考,具体内容如下 // upgrade note: replaced...

本文实例为大家分享了unity3d ui利用shader添加效果的具体代码,供大家参考,具体内容如下

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
 }
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。