How do I create a mesh collision detection?

I made terrain mesh.
source code :
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class Terrain : MonoBehaviour {

int patch = 4;
int sell= 8;
int size= 1;
public Mesh terrain_Mesh = null;

public List<Vector3> _Vector = new List<Vector3>();
public List<int> _Tri = new List<int>();
public List<Vector3> _Normal = new List<Vector3>();
public List<Vector2> _Tex = new List<Vector2>();
public List<Color> _Color = new List<Color> ();
public List<Bounds> _Bounds = new List<Bounds>();

QuadTree quadTree;

void Start()
{
//	terrain_Mesh = GetComponent<MeshFilter>().mesh;
//    CreateTerrain();
}

void CreateTerrain()
{
    int vertexCount = patch * sell + 1;
    int vertexMaxCount = vertexCount * vertexCount;

// create Vertex
    for (int z = 0; z < vertexCount; ++z)
    {
        for (int x = 0; x < vertexCount; ++x)
        {
		    _Vector.Add( new Vector3(((float)x - (vertexCount - 1) * 0.5f) * size
                , 0f
                , -((float)z - (vertexCount - 1) * 0.5f) * size));

            _Tex.Add(new Vector2(((float)x - (vertexCount - 1) * 0.5f) * size
                , -((float)z - (vertexCount - 1) * 0.5f) * size));
        }
    }
    
    // save index
    int width = vertexCount - 1;
    for (int i = 0; i < vertexCount * (vertexCount - 1); i += vertexCount)
    {
        for (int j = i; j < i + width; ++j)
        {
            // up face
            _Tri.Add(j);
            _Tri.Add(j + 1);
            _Tri.Add(j + vertexCount);
            
            // down face
            _Tri.Add(j + vertexCount);
            _Tri.Add(j + 1);
			_Tri.Add(j + vertexCount + 1);
        }
    }

// create normal
    for (int i = 0; i < vertexMaxCount; ++i)
        _Normal.Add(new Vector3(0f, 1f, 0f));

    // create color
    for (int i = 0; i < vertexMaxCount; ++i)
        _Color.Add(new Color(1f, 1f, 1f));

// save mesh date
    terrain_Mesh.Clear();
    terrain_Mesh.vertices = _Vector.ToArray();
    terrain_Mesh.uv = _Tex.ToArray();
    terrain_Mesh.triangles = _Tri.ToArray();
    terrain_Mesh.normals = _Normal.ToArray();
    terrain_Mesh.colors = _Color.ToArray();
    terrain_Mesh.RecalculateBounds();

    // create quadtree
    quadTree = new QuadTree();
    quadTree.QuadTreeBuild(vertexCount);
        
    // Mesh Render
    terrain_Mesh.SetIndices(_Tri.ToArray(), MeshTopology.Triangles,0);
    terrain_Mesh.RecalculateNormals();
    terrain_Mesh.Optimize();
}

// collsion!!
void OnTriggerEnter(Collider Object)
{
	if (Object.transform.tag == "Sand")
    {
		SandUP(Object.transform.position);
    }
}

void OnCollisionEnter( Collision Object )
{
	if (Object.gameObject.name == "Sand")
	{
		Debug.Log( "Collision" );
	}
}

void SandUP( Vector3 vector )
{
    int[] index = quadTree.FindIndex(terrain_Mesh.vertices, vector);

    for (int i = 0; i < 4; ++i)
    {
        Vector3 vec3 = new Vector3(_Vector<em>.x, _Vector<em>.y + 5f, _Vector*.z);*</em></em>

_Vector.RemoveAt(i);
_Vector.Insert(i, vec3);
}
terrain_Mesh.vertices = _Vector.ToArray();
}
}
I want collision mesh of terrain and cube of unity object…
But these don’t collision…TT
Help…!!!

Read: Mesh Collider and MeshCollider