My Shadows Aren't Moving!

I’m using a shader to make my plants sway in the wind, but the shadows that the plant casts are stationary.
How do I fix this?

Here is the code for the shader that I am using:

// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'

Shader "Custom/Lightweight PBR Foliage Movement - Underwater"
{
    Properties
    {
        _MainTex("Base (RGB)", 2D) = "white" {}
    _MainColor("Color", Color) = (1,1,1,1)
        _MinY("Minimum Y Value", float) = 0.0

        _xScale("X Amount", Range(-1,1)) = 0.5
        _yScale("Z Amount", Range(-1,1)) = 0.5

        _Scale("Effect Scale", float) = 1.0
        _Speed("Effect Speed", float) = 1.0

        _WorldScale("World Scale", float) = 1.0
    }


        SubShader
    {
        Tags{ "RenderType" = "Opaque" }

        CGPROGRAM
#pragma surface surf Lambert vertex:vert
#pragma target 3.0
#include "UnityCG.cginc"

        sampler2D _MainTex;
    float4 _MainColor;
    float _MinY;
    float _xScale;
    float _yScale;
    float _Scale;
    float _WorldScale;
    float _Speed;
    float _Amount;

    struct Input
    {
        float2 uv_MainTex;
    };

    void vert(inout appdata_full v)
    {
        float num = v.vertex.z;

        if ((num - _MinY) > 0.0) {
            float3 worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;
            float x = sin(worldPos.x / _WorldScale + (_Time.y*_Speed)) * (num - _MinY) * _Scale * 0.01;
            float y = sin(worldPos.y / _WorldScale + (_Time.y*_Speed)) * (num - _MinY) * _Scale * 0.01;

            v.vertex.x += x * _xScale;
            v.vertex.y += y * _yScale;
        }
    }

    void surf(Input IN, inout SurfaceOutput o)
    {
        o.Albedo = _MainColor * tex2D(_MainTex, IN.uv_MainTex).rgb;
    }

    ENDCG

    }
        Fallback "Diffuse"
}

Update: removing “Fallback “Diffuse”” removes the shadows completely, which I think means that my shader isn’t computing shadows at all how would I add realtime shadows to this shader (that move with the vertex displacement?)

You need a custom shadow caster pass that matches your vertex offset. Otherwise it’s using the default one from the fallback shader. When using a Surface Shader you can tell it to generate a shadowcaster pass for you with addshadow.

#pragma surface surf Lambert vertex:vert __*addshadow*__