# Set Y points of vertices on ground.

I’m trying to create a grid tile and set it on the ground. Here is my script so far:

``````Mesh mesh = new Mesh();

Vector3[] vertices = new Vector3[4];
vertices[0] = new Vector3(-tileWidth/4, 0, tileWidth/4); //top-left
vertices[1] = new Vector3(tileWidth/4, 0, tileWidth/4); //top-right
vertices[2] = new Vector3(-tileWidth/4, 0, -tileWidth/4); //bottom-left
vertices[3] = new Vector3(tileWidth/4, 0, -tileWidth/4); //top-right

mesh.vertices = vertices;

int[] triangles = new int[6]{0,1,2,3,2,1};
mesh.triangles = triangles;

Vector2[] uvs = new Vector2[4]; // setting UVs
uvs[0] = new Vector2(0,1); //top-left
uvs[1] = new Vector2(1,1); //top-right
uvs[2] = new Vector2(0,0); //bottom-left
uvs[3] = new Vector2(1,0); //bottom-right

mesh.uv = uvs;
``````

When setting the vertices, instead of setting y to 0, I would like to cast a ray from each vertex in the `-Vector3.up` direction and set the vertex’s `y` to `hit.point.y` in global space.

How do I achieve this?

Easiest way to do that would be to create a function to do the raycast for a single XZ position:

``````Vector3 getVertexPosFromXZ(float x, float z) {
RaycastHit hit;
if (Physics.Raycast(new Vector3(x, 99999f, z), -Vector3.up, out hit)) {
return new Vector3(x, hit.point.y, z);
} else {
return new Vector3(x, 0f, z); // or whatever the default should be
}
``````

and then call it four times:

``````vertices[0] = getVertexPosFromXZ(-tileWidth/4, tileWidth/4); //top-left
vertices[1] = getVertexPosFromXZ(tileWidth/4, tileWidth/4); //top-right
vertices[2] = getVertexPosFromXZ(-tileWidth/4, -tileWidth/4); //bottom-left
vertices[3] = getVertexPosFromXZ(tileWidth/4, -tileWidth/4); //top-right
``````