How can I collide with my water

Hi, I am working on my water shader but I have run into some problems. The first problem is that I dont know how to collide with my water because my shaders doesnt work on a collider. The second problem is that the normals dont get the same offset as the water mesh, even tho I do wrote the code to do so. In the picture you can see that I put a plane under the water mesh(the lowest object) to show you that there is somthing under the water that goes over the shadow of the plane. Thanks in advance!

This is my code:

Shader "Custom/NoobShader_04" {
	Properties {
		_Color ("Color", Color) = (0,0.55,0.83,1)
		_Diffuse ("Diffuse Map", 2D) = "white" {}
		_Displacement ("Displacement Map", 2D) = "white" {}
		_Scale ("Wave Scale", float) = 0.7
		_Frequency ("Frequency", float) = 0.6
		_Speed ("Speed", float) = 0.5

	SubShader {
		Tags { "LightMode" = "ForwardBase"}
		#pragma vertex vert
		#pragma fragment frag
		float4 _Color;
		sampler2D _Displacement;
		sampler2D _Diffuse;
		float _Scale;
		float _Frequency;
		float _Speed;
		float4 _LightColor0;
		struct VertexOutput
			float4 pos : SV_POSITION;
			float3 nor : NORMAL;
			float4 col : COLOR;
			float4 tex : TEXCOORD0;
		struct VertexInput
			float4 vertex : POSITION;
			float3 normal : NORMAL;
			float4 texcoord : TEXCOORD0;
		struct FragmentOutput
			float4 color : COLOR;

		VertexOutput vert (VertexInput i)
			VertexOutput VOUT;
			float4 disp = tex2Dlod(_Displacement, float4(i.texcoord.x * _Frequency + (_Time.x * _Speed), i.texcoord.y * _Frequency + (_Time.x * _Speed),0.0,0.0));
			float4 newPos = i.vertex;
			float3 newNor = i.normal;
			newPos.y += _Scale * disp.y; 
			newNor.y += _Scale * disp.y;
			VOUT.nor = newNor;
			VOUT.pos = mul(UNITY_MATRIX_MVP,newPos);
			VOUT.tex = i.texcoord;
			float3 normalDirection = normalize( mul(float4(newNor,0.0),_World2Object).xyz);
			float3 lightDirection = normalize(;
			float atten = 1.0;
			float3 diffuseRefflection = atten * * _Color.rgb *  max( 0.0, dot(normalDirection, lightDirection));
			VOUT.col = float4(diffuseRefflection, 1.0);
			return VOUT;
		FragmentOutput frag(VertexOutput v) 
			FragmentOutput FOUT;
			float4 tex = tex2D(_Diffuse,float4(v.tex.x * _Frequency + (_Time.x * _Speed), v.tex.y * _Frequency + (_Time.x * _Speed),0.0,0.0));
			FOUT.color = tex * v.col + UNITY_LIGHTMODEL_AMBIENT.xyzw;
			return FOUT;
	FallBack "Diffuse"

I’ve been working on some water effects that include a reactive body of water having more detailed collision than a single box or plane. Have a look and see if it gives you any ideas for your situation:

There are more videos in that playlist and the water is currently more advanced than the latest video but if you have any questions about specific features I can describe how I went about achieving them.

It’s among several other gizmos I’m thinking of putting up on the asset store when they’re finished but I don’t know if there would be interest in many of them as they seem like they might be too specific. I might just put them on for free as a form of advertising my dev services.