Shader "Custom/SpriteOutline" { Properties { _MainTex ("Sprite Texture", 2D) = "white" {} _OutlineColor ("Outline Color", Color) = (0,0,0,1) _OutlineSize ("Outline Size", Float) = 1 } SubShader { Tags {"Queue"="Transparent" "RenderType"="Transparent"} LOD 100 Cull Off Lighting Off ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Pass { Name "OUTLINE" CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata_t { float4 vertex : POSITION; float2 texcoord : TEXCOORD0; }; struct v2f { float4 vertex : SV_POSITION; float2 uv : TEXCOORD0; }; sampler2D _MainTex; float4 _MainTex_ST; fixed4 _OutlineColor; float _OutlineSize; v2f vert (appdata_t v) { v2f o; float4 pos = v.vertex; float2 offset = float2(_OutlineSize / _ScreenParams.x, _OutlineSize / _ScreenParams.y); pos.xy += offset; o.vertex = UnityObjectToClipPos(pos); o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); return o; } fixed4 frag (v2f i) : SV_Target { fixed4 col = tex2D(_MainTex, i.uv); if (col.a < 0.1) discard; return _OutlineColor; } ENDCG } Pass { Name "SPRITE" CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata_t { float4 vertex : POSITION; float2 texcoord : TEXCOORD0; }; struct v2f { float4 vertex : SV_POSITION; float2 uv : TEXCOORD0; }; sampler2D _MainTex; float4 _MainTex_ST; v2f vert (appdata_t v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); return o; } fixed4 frag (v2f i) : SV_Target { fixed4 col = tex2D(_MainTex, i.uv); return col; } ENDCG } } }