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