I need to instantiate an array of 2 elements that is floors of black and white color in an alternating pattern so it looks like a chess board. It is for my game that has 2D Dungeon Generation.

This is my current code:

public enum TileType
    Wall, Floor,

public GameObject[] floorTiles;
public GameObject[] wallTiles;
public GameObject[] outerWallTiles;

private TileType[][] tiles;
private Room[] rooms;
private Corridor[] corridors;
private GameObject boardHolder;

void InstantiateTiles()
    for (int i = 0; i < tiles.Length; i++)
        for (int j = 0; j < tiles[i].Length; j++)
            InstantiateFromArray(floorTiles, i, j);

            if (tiles[i][j] == TileType.Wall)
                InstantiateFromArray(wallTiles, i, j);

void InstantiateFromArray(GameObject[] prefabs, float xCoord, float yCoord)
    int randomIndex = Random.Range(0, prefabs.Length);
    Vector3 position = new Vector3(xCoord, yCoord, 0f);
    GameObject tileInstance = Instantiate(prefabs[randomIndex], position, Quaternion.identity) as GameObject;
    tileInstance.transform.parent = boardHolder.transform;


So this is how it looks right now (just random positions of floor prefabs):

Screenshot of dungeon with random-looking squares Screenshot of more random-looking squares

And this is what I am trying to achieve (alternating):

enter image description here


1 Answer 1


In the decision on what tile prefab to choose, you can think of it this way:
If (xCoord + yCoord) % 2 == 0, then select prefab1
If (xCoord + yCoord) % 2 != 0, then select prefab2

This ensures the tiles form a "chess-like" board.
Note that you will probably want to pass xCoord and yCoord as integers instead of floats.

  • 1
    \$\begingroup\$ You should check with odds using (xCoord + yCoord) % 2 != 0, since negative values can also be negative (but would yield -1, not 1). \$\endgroup\$
    – Alexander
    May 12, 2020 at 16:30
  • \$\begingroup\$ @Alexander-ReinstateMonica This is correct, though in this instance he is only passing positive values. I edited my answer. \$\endgroup\$ May 12, 2020 at 16:45
  • 2
    \$\begingroup\$ I would would avoid it just as a general habit. Sometimes it matters, sometimes it doesn't, but it's frustrating enough of a bug when it happens (particularly for new programmers, who might not have experienced the difference) that I recommend just always using != 1. It's no harder to write != 0 than it is to write == 1, so I see this as an absolute win \$\endgroup\$
    – Alexander
    May 12, 2020 at 17:46

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .