Shader "Custom/MaskedFlowEffect" 
 | 
{ 
 | 
    Properties 
 | 
    { 
 | 
        // 流光的遮罩是在材质中设置的,挂载在透明图片上就可以产生透明效果,参考材质MaskedFlowEffectMat 
 | 
        _FlowSpacing ("流光间距", Range(0.1, 2)) = 0.5 
 | 
        _FlowThickness ("流光粗细", Range(0.01, 0.5)) = 0.1 
 | 
        _MainTex ("Base (RGB)", 2D) = "black" {} 
 | 
        [HideInInspector] _Transparency ("Transparency", Range(0,1)) = 1 
 | 
        _MaskTex ("Mask (A)", 2D) = "white" {} 
 | 
        _FlowColor ("Flow Color", Color) = (1,1,1,1) 
 | 
        _FlowSpeed ("Flow Speed", Range(0,5)) = 1 
 | 
        _FlowWidth ("Flow Width", Range(0,1)) = 0.2 
 | 
        _FlowDirection ("Flow Direction", Vector) = (1,0,0,0) 
 | 
    } 
 | 
  
 | 
    SubShader 
 | 
    { 
 | 
        Tags { "Queue"="Transparent" "RenderType"="Transparent" "IgnoreProjector"="True" } 
 | 
        LOD 100 
 | 
        Blend One OneMinusSrcAlpha 
 | 
        ZWrite Off 
 | 
  
 | 
        Pass 
 | 
        { 
 | 
            CGPROGRAM 
 | 
            #pragma vertex vert 
 | 
            #pragma fragment frag 
 | 
            #include "UnityCG.cginc" 
 | 
  
 | 
            struct appdata 
 | 
            { 
 | 
                float4 vertex : POSITION; 
 | 
                float2 uv : TEXCOORD0; 
 | 
            }; 
 | 
  
 | 
            struct v2f 
 | 
            { 
 | 
                float2 uv : TEXCOORD0; 
 | 
                float4 vertex : SV_POSITION; 
 | 
            }; 
 | 
  
 | 
            sampler2D _MainTex; 
 | 
            sampler2D _MaskTex; 
 | 
            float4 _FlowColor; 
 | 
            float _FlowSpeed; 
 | 
        float _FlowSpacing; 
 | 
        float _FlowThickness; 
 | 
            float _FlowWidth; 
 | 
            float4 _FlowDirection; 
 | 
  
 | 
            v2f vert (appdata v) 
 | 
            { 
 | 
                v2f o; 
 | 
                o.vertex = UnityObjectToClipPos(v.vertex); 
 | 
                o.uv = v.uv; 
 | 
                return o; 
 | 
            } 
 | 
  
 | 
            fixed4 frag (v2f i) : SV_Target 
 | 
            { 
 | 
                fixed4 base = tex2D(_MainTex, i.uv); 
 | 
                fixed mask = tex2D(_MaskTex, i.uv).a; 
 | 
                 
 | 
                float2 dir = normalize(_FlowDirection.xy); 
 | 
                float flowPos = dot(i.uv, dir) / _FlowSpacing; 
 | 
                float flow = (sin(_Time.y * _FlowSpeed + flowPos * 10) * 0.5 + 0.5) * _FlowThickness * 2; 
 | 
                float flowMask = smoothstep(0.5 - _FlowWidth, 0.5 + _FlowWidth, flow) * mask; 
 | 
                 
 | 
                fixed4 final = base; 
 | 
                final.rgb = lerp(base.rgb, _FlowColor.rgb, flowMask * _FlowColor.a); 
 | 
                return final; 
 | 
            } 
 | 
            ENDCG 
 | 
        } 
 | 
    } 
 | 
} 
 |