diffuse curve world shader

I try to make a my objects to appear curved like Subway game, so I use this Shader, it’s working Editor, but doesn’t produce any thing on Android device

    Shader "Custom/CurvedWorld"
    {
    Properties {
        _MainTex ("Base (RGB)", 2D) = "white" {}
    }
    SubShader {
        Tags { "RenderType"="Opaque" }
        LOD 150
     
    CGPROGRAM
    #pragma surface surf Lambert noforwardadd  vertex:vert
     
    sampler2D _MainTex;
     
    struct Input {
        float2 uv_MainTex;
    };
     
    void surf (Input IN, inout SurfaceOutput o) {
        fixed4 c = tex2D(_MainTex, IN.uv_MainTex);
        o.Albedo = c.rgb;
        o.Alpha = c.a;
    }
     
    void vert( inout appdata_full v)
            {
            float4 _QOffset= float4(-5,-5,0,0);
            float _Dist=100.0;
            vv.xyz -= _WorldSpaceCameraPos.xyz;
              float4 vPos = mul (UNITY_MATRIX_MV, v.vertex);
                    float zOff = vPos.z/_Dist;
                vPos += _QOffset*zOff*zOff;
                v.vertex = mul (vPos, UNITY_MATRIX_IT_MV);
                v.texcoord = mul( UNITY_MATRIX_TEXTURE0, v.texcoord );    
            }
    ENDCG
    }
     
     
    }

Your shader looks like a slightly mashed up version of the one at Animal Crossing Curved World Shader | Alastair Aitchison . Try this code instead:

Shader "Custom/CurvedWorld" {
    Properties {
        // Diffuse texture
        _MainTex ("Base (RGB)", 2D) = "white" {}
        // Degree of curvature
        _Curvature ("Curvature", Float) = 0.001
    }
    SubShader {
        Tags { "RenderType"="Opaque" }
        LOD 200
 
        CGPROGRAM
        // Surface shader function is called surf, and vertex preprocessor function is called vert
        // addshadow used to add shadow collector and caster passes following vertex modification
        #pragma surface surf Lambert vertex:vert addshadow
 
        // Access the shaderlab properties
        uniform sampler2D _MainTex;
        uniform float _Curvature;
 
        // Basic input structure to the shader function
        // requires only a single set of UV texture mapping coordinates
        struct Input {
            float2 uv_MainTex;
        };
 
        // This is where the curvature is applied
        void vert( inout appdata_full v)
        {
            // Transform the vertex coordinates from model space into world space
            float4 vv = mul( _Object2World, v.vertex );
 
            // Now adjust the coordinates to be relative to the camera position
            vv.xyz -= _WorldSpaceCameraPos.xyz;
 
            // Reduce the y coordinate (i.e. lower the "height") of each vertex based
            // on the square of the distance from the camera in the z axis, multiplied
            // by the chosen curvature factor
            vv = float4( 0.0f, (vv.z * vv.z) * - _Curvature, 0.0f, 0.0f );
 
            // Now apply the offset back to the vertices in model space
            v.vertex += mul(_World2Object, vv);
        }
 
        // This is just a default surface shader
        void surf (Input IN, inout SurfaceOutput o) {
            half4 c = tex2D (_MainTex, IN.uv_MainTex);
            o.Albedo = c.rgb;
            o.Alpha = c.a;
        }
        ENDCG
    }
    // FallBack "Diffuse"
}