unity UGUI虚线框shader

在这里插入图片描述

Shader "Custom/DottedLineShader"
{
   Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        _Color("Color",COLOR) = (1,1,1,1)
        _LineLength("虚线长度",float) =0.08
    }
    SubShader
    {
     	Tags //设置支持UGUI
        { 
            "Queue"="Transparent" 
            "IgnoreProjector"="True" 
            "RenderType"="Transparent" 
            "PreviewType"="Plane"
        }

        Cull Off
        Lighting Off
        ZWrite Off
        Blend SrcAlpha OneMinusSrcAlpha
        LOD 100
        
        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;
                float3 worldPos : TEXCOORD1;
            };

            sampler2D _MainTex;
            float4 _Color;
            float _LineLength;

            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = v.uv;
                // 计算世界坐标系下的顶点位置
                o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;
                return o;
            }
            //绝对值对称法
            float box3(float2 uv, float left, float top)
            {
                float2 b1 = 1 - step(float2(left,top),abs(uv));
                float value = b1.x * b1.y;
                return value;
            }
            //矩形框
            float box4(float2 uv,float left,float top, float width)
            {
                float value = box3(uv,left,top);
                value -= box3(uv,left-width,top-width);
                
                return value;

            }


            fixed4 frag (v2f i) : SV_Target
            {
            float2 uv = i.uv;

            float2 center = float2(0.5,0.5);
            float2 halfSize =center;
            float2 fw = _LineLength;
    
            float2 dist = abs(uv - center);
    
            float col = 0.0;

            float2 pixel = uv / fw;
            float aspect = halfSize.y / halfSize.x;
            float dir = (dist.x * aspect > dist.y) ?-sign(uv.x - center.x) : sign(uv.y - center.y);
            float dash = step(0.5, frac((pixel.x + pixel.y) * dir / 10.0 + _Time.z));

            float f = box4(i.uv-center,0.5,0.5,0.03);

            float4 texCol = tex2D(_MainTex, i.uv);


	        float4 fragColor =lerp(texCol,_Color, dash*f);

                return fragColor;
            }
            ENDCG
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值