My shader is behind everything

Hiya,
Another shader question. I’ve had this shader sitting in my library for a while now and just started using it, I wish I remember who i got it from because it’s fantastic.But I have one problem. I assume it’s rendering this object first and then putting everything else in front because if there is nothing visibly behind it you can see it. Otherwise it’s hidden. I can’t figure out how to fix it.

Shader "HaloLightning" {

	Properties {

		_NoiseTex("Noise (RGBA)", 2D) = "white" {}

		_Noise("Noise", FLOAT) = 0.2

		_Speed("Speed", FLOAT) = 0.2

		_FallOff("FallOff", FLOAT) = 2

		_Lines("Lines", FLOAT) = 0.2

		_Color("Tint Color", COLOR) = (0.5,0.5,0.5,0.5)

		_Width("Width", FLOAT) = 0.2

		_camDir("Camera Look Direction", Vector) = (1,0,0,0)

	}

	SubShader {	

		Pass{



			Tags {

		    "Queue"="Transparent"

        	"RenderType"="Transparent"

	        }

        

			Blend SrcAlpha OneMinusSrcAlpha

			ZWrite Off

			Cull Off

			

			CGPROGRAM

			#pragma vertex vert

			#pragma fragment frag

			#include "UnityCG.cginc"

			

			float4 _NoiseTex_ST;

			sampler2D _NoiseTex;

			float _Speed;

			half4 _Color;

			float _FallOff;

			float _Lines;

			float _Noise;

			float _Width;

			float4 _camDir;

			

			struct data{

				float4 vertex : POSITION;

				float2 texcoord : TEXCOORD;

				float3 normal : NORMAL;

			};

			

			struct v2f{

				float4 position : POSITION;

				float2 uv : TEXCOORD;

				float viewAngle : TEXCOORD1;

				float ypos : TEXCOORD2;

			};

			

			v2f vert(data v){

				v2f o;

				o.position = mul(UNITY_MATRIX_MVP, v.vertex + float4(v.normal, 0) * _Width);

				o.uv = TRANSFORM_TEX(v.texcoord, _NoiseTex);

				o.viewAngle = 1- abs(dot(v.normal, normalize(_camDir.xyz)));

				o.ypos = o.position.y;

				return o;

			}

			

			half4 frag(v2f i) : COLOR{

				float2 uvOffset1 = _Time.xy*_Noise;

				float2 uvOffset2 = -_Time.xx*_Noise;

				half4 noise1 = tex2D(_NoiseTex, i.uv + uvOffset1);

				half4 noise2 = tex2D(_NoiseTex, i.uv + uvOffset2);

				float noise = (dot(noise1, noise2) - 1) * _Noise;

				half4 col = sin((i.ypos*_Lines + _Time.x*_Speed + noise)*100);

				noise1 = tex2D(_NoiseTex, i.uv*6 + uvOffset1);

				noise2 = tex2D(_NoiseTex, i.uv*6 + uvOffset2);

				col.a *= saturate(1.3-(noise1.g+noise2.g)) * pow(i.viewAngle,_FallOff) * 15;

				return col * _Color * 2;

			}

			

			ENDCG

		}

	}

}

Thanks for any help

Try changing Zwrite off to Zwrite On. I havent tested it but it should work for you.