How to use AlphaTest with a CGPROGRAM

I’ve used AlphaTest Greater 0 as an ‘Alpha Cutoff’ type of effect for a shader I’m using (Because I need ZWrite On), however when I try to implement a CGPROGRAM to add a Tint over my texture, it seems to be overriding the AlphaTest.

The result looks like so:

But I want it to look like this:

I’ve just used the Sprite-Default.shader from unity to add the Color tint. I’m obviously a rookie with this, and I’d like to understand whats going on. Any help would be great!


And here is my Shader as it currently stands:

Shader "Unlit/planetDefault"  {
         Properties 
         {
             _MainTex ("Base", 2D) = "white" {}
             _Color ("Tint", Color) = (1,1,1,1)
         }
     
         SubShader 
         {
            
             Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Opaque"}
             LOD 200

             Cull Off
             ZWrite On
             Blend SrcAlpha OneMinusSrcAlpha 
             AlphaTest Greater 0

             Pass 
             {

        CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #pragma multi_compile _ PIXELSNAP_ON
            #include "UnityCG.cginc"
            
            struct appdata_t
            {
                float4 vertex   : POSITION;
                float4 color    : COLOR;
                float2 texcoord : TEXCOORD0;
            };

            struct v2f
            {
                float4 vertex   : SV_POSITION;
                fixed4 color    : COLOR;
                float2 texcoord  : TEXCOORD0;
            };
            
            fixed4 _Color;

            v2f vert(appdata_t IN)
            {
                v2f OUT;
                OUT.vertex = UnityObjectToClipPos(IN.vertex);
                OUT.texcoord = IN.texcoord;
                OUT.color = IN.color * _Color;
                #ifdef PIXELSNAP_ON
                OUT.vertex = UnityPixelSnap (OUT.vertex);
                #endif

                return OUT;
            }

            sampler2D _MainTex;
            sampler2D _AlphaTex;
            float _AlphaSplitEnabled;

            fixed4 SampleSpriteTexture (float2 uv)
            {
                fixed4 color = tex2D (_MainTex, uv);

#if UNITY_TEXTURE_ALPHASPLIT_ALLOWED
                if (_AlphaSplitEnabled)
                    color.a = tex2D (_AlphaTex, uv).r;
#endif //UNITY_TEXTURE_ALPHASPLIT_ALLOWED

                return color;
            }

            fixed4 frag(v2f IN) : SV_Target
            {
                fixed4 c = SampleSpriteTexture (IN.texcoord) * IN.color;
                c.rgb *= c.a;
                return c;
            }
        ENDCG

             Lighting Off
             SetTexture [_MainTex] 
             {
                Combine texture
             } 
             }

         }
     }

I’ve just tracked this down. Because i’m using a Unity Particle System, there is apparently a known issue with particles rendering incorrectly (something to do with the Depth Buffer I guess?) where any particle in front of the particle system’s transform.position isn’t rendering correctly because the Z wont go below 0.