# Change transform.position.y in a loop

I am trying make a game that will generate a grid of blocks in start.
This code makes them generate on x line, but when I try to add y in a loop and set it in the Vector3, it doesn’t seem to work. *The problem is that it doesn’t switch to 2nd line in y.
using UnityEngine;
using System.Collections;

``````public class GenerateTileyyy: MonoBehaviour {

public GameObject tile;
public float distanceBetweenTiles = 1.5f;
public float spawnSpeed = 0;
public float grid = 15;
public float x = 0;
public float y = 0;

// Use this for initialization
void Start () {

float x = transform.position.x;
float y = transform.position.y;

for (x=0; x < grid; x=x+1.5f) {

Instantiate (tile, new Vector3 (x, y, 0), Quaternion.identity);
if (x == 10f) {
x = 0;
y = y + 2;
}
}
}
}
``````

You’re declaring x and y twice, which is silly, but irrelevant.

Your main problem is that 1.5 `*` 6 is 9, and 1.5 `*` 7 is 10.5, so you’re never going to get x == 10f. Actually, because float arithmetic is imprecise, it’s a bad idea to test equality anyways (though 0.5f is actually exact, so it’s not a big deal here).

Change your if to `x > 10f` and you should be in good shape… or you would be, except it will actually cause an infinite loop, since x will then always be less than grid. While you could change the second argument of your for loop to `y < grid`, it’s weird and unnatural to have different variables in there.

I suggest instead that you use a slightly more popular pattern: Nested loops.

`````` for (float x = 0; x < grid; x += 1.5f)
{
for (float y = 0; y < grid; y += 2f)
{
Instantiate(tile, new Vector3(x,y,0), Quaternion.identity);
}
}
``````