Variables

[SerializeField]
private Transform[] puntos;

[SerializeField]
private float velocidad = 3f;

private int indice;

Movimiento

void Update()
{
    Transform objetivo =
        puntos[indice];

    transform.position =
        Vector3.MoveTowards(
            transform.position,
            objetivo.position,
            velocidad * Time.deltaTime
        );

    if (Vector3.Distance(
        transform.position,
        objetivo.position) < 0.1f)
    {
        indice++;

        if (indice >= puntos.Length)
        {
            indice = 0;
        }
    }
}

Resumen rápido

array de puntos
→ MoveTowards
→ cambiar índice