Why when using gizmos the drawing is not fitting ?

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Grid : MonoBehaviour
{
    private MeshFilter meshf;
    private Mesh mesh;
    private Vector3[] vertices;

    private void Start()
    {
        StartCoroutine(GenerateOrigin()); 
    }

    private IEnumerator GenerateOrigin()
    {
        // You can change that line to provide another MeshFilter
        meshf = GetComponent<MeshFilter>();
        mesh = new Mesh();
        meshf.mesh = mesh;
        mesh.Clear();

        #region Vertices

        WaitForSeconds wait = new WaitForSeconds(0.05f);
        vertices = new Vector3[resX * resZ];
        for (int z = 0; z < resZ; z++)
        {
            // [ -length / 2, length / 2 ]
            float zPos = ((float)z / (resZ - 1) - .5f) * length;
            for (int x = 0; x < resX; x++)
            {
                // [ -width / 2, width / 2 ]
                float xPos = ((float)x / (resX - 1) - .5f) * width;
                vertices[x + z * resX] = new Vector3(xPos, 0f, zPos);
                yield return wait;
            }
        }
        #endregion

        #region Normales
        Vector3[] normales = new Vector3[vertices.Length];
        for (int n = 0; n < normales.Length; n++)
            normales[n] = Vector3.up;
        #endregion

        #region UVs     
        Vector2[] uvs = new Vector2[vertices.Length];
        for (int v = 0; v < resZ; v++)
        {
            for (int u = 0; u < resX; u++)
            {
                uvs[u + v * resX] = new Vector2((float)u / (resX - 1), (float)v / (resZ - 1));
            }
        }
        #endregion

        #region Triangles
        int nbFaces = (resX - 1) * (resZ - 1);
        int[] triangles = new int[nbFaces * 6];
        int t = 0;
        for (int face = 0; face < nbFaces; face++)
        {
            // Retrieve lower left corner from face ind
            int i = face % (resX - 1) + (face / (resZ - 1) * resX);

            triangles[t++] = i + resX;
            triangles[t++] = i + 1;
            triangles[t++] = i;

            triangles[t++] = i + resX;
            triangles[t++] = i + resX + 1;
            triangles[t++] = i + 1;
        }
        #endregion

        mesh.vertices = vertices;
        mesh.normals = normales;
        mesh.uv = uvs;
        mesh.triangles = triangles;

        mesh.RecalculateBounds();
    }

    private void OnDrawGizmos()
    {
        Gizmos.color = Color.black;
        for (int i = 0; i < vertices.Length; i++)
        {
            Gizmos.DrawSphere(vertices*, 0.1f);*

}
}
}
I’m using WaitForSeconds and return Wait. And what i’m getting in the end after it’s creating the vertices one by one is this: The mesh the red is not on the vertices not in place. Maybe it’s fine i’m not sure. I thought it should be on it on the vertices. It seems above it and a bit to the side.
[92064-ss111.jpg|92064]*
*

The vertices of a Mesh are defined in localspace of the Mesh object. So your gameobject is most likely not located at (0,0,0). You want to transform the local space positions into world space position when you use them for your gizmos. Fot this you would simply use transform.TransformPoint()

for example:

for (int i = 0; i < vertices.Length; i++)
{
    Gizmos.DrawSphere(transform.TransformPoint(vertices*), 0.1f);*

}