
Shader "Custom/DottedLineShader"
{Properties{_MainTex ("Texture", 2D) = "white" {}_Color("Color",COLOR) = (1,1,1,1)_LineLength("虚线长度",float) =0.08}SubShader{Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" "PreviewType"="Plane"}Cull OffLighting OffZWrite OffBlend SrcAlpha OneMinusSrcAlphaLOD 100Pass{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}}
}