Bird
Raised Fist0
Unityframework~20 mins

Tilemap basics in Unity - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Tilemap Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of this Tilemap cell position code?

Consider this Unity C# code snippet that gets the cell position of a world point in a Tilemap:

Vector3 worldPos = new Vector3(2.5f, 3.7f, 0f);
Vector3Int cellPos = tilemap.WorldToCell(worldPos);
Debug.Log(cellPos);

What will be printed in the console?

Unity
Vector3 worldPos = new Vector3(2.5f, 3.7f, 0f);
Vector3Int cellPos = tilemap.WorldToCell(worldPos);
Debug.Log(cellPos);
A(2, 3, 0)
B(3, 4, 0)
C(2, 4, 0)
D(3, 3, 0)
Attempts:
2 left
💡 Hint

Remember that WorldToCell rounds down to the nearest cell coordinates.

❓ Predict Output
intermediate
2:00remaining
What does this code print when setting a tile?

Given a Tilemap and a TileBase tile, what will this code print?

Vector3Int pos = new Vector3Int(1, 1, 0);
tilemap.SetTile(pos, tile);
TileBase result = tilemap.GetTile(pos);
Debug.Log(result == tile);
Unity
Vector3Int pos = new Vector3Int(1, 1, 0);
tilemap.SetTile(pos, tile);
TileBase result = tilemap.GetTile(pos);
Debug.Log(result == tile);
ATrue
BFalse
CNullReferenceException
DCompilation error
Attempts:
2 left
💡 Hint

SetTile assigns the tile at the position, GetTile returns the tile at that position.

🔧 Debug
advanced
2:00remaining
Why does this Tilemap code throw a NullReferenceException?

Look at this code snippet:

Tilemap tilemap;
void Start() {
    Vector3Int pos = new Vector3Int(0, 0, 0);
    TileBase tile = tilemap.GetTile(pos);
    Debug.Log(tile.name);
}

Why does this code throw a NullReferenceException?

Unity
Tilemap tilemap;
void Start() {
    Vector3Int pos = new Vector3Int(0, 0, 0);
    TileBase tile = tilemap.GetTile(pos);
    Debug.Log(tile.name);
}
Apos is invalid and causes GetTile to fail
Btilemap is not assigned and is null, so calling GetTile causes the exception
Ctile is null because no tile exists at pos, so accessing tile.name causes the exception
DDebug.Log cannot print tile.name because TileBase has no name property
Attempts:
2 left
💡 Hint

Check if the tile exists at the position before accessing its properties.

🧠 Conceptual
advanced
2:00remaining
How does the Tilemap's origin affect tile placement?

In Unity Tilemaps, what happens if you change the Tilemap's origin property?

AThe origin changes the size of each tile in the Tilemap
BThe origin determines the sorting order of tiles when rendered
CThe origin sets the default tile used when no tile is placed
DThe origin shifts the coordinate system, so tile positions are offset accordingly
Attempts:
2 left
💡 Hint

Think about how coordinates relate to tile positions.

❓ Predict Output
expert
3:00remaining
What is the number of tiles after this code runs?

Consider this code that sets tiles in a Tilemap:

for (int x = 0; x < 3; x++) {
    for (int y = 0; y < 3; y++) {
        Vector3Int pos = new Vector3Int(x, y, 0);
        if ((x + y) % 2 == 0) {
            tilemap.SetTile(pos, tile);
        }
    }
}
int count = 0;
foreach (var pos in tilemap.cellBounds.allPositionsWithin) {
    if (tilemap.GetTile(pos) != null) count++;
}
Debug.Log(count);

What number will be printed?

Unity
for (int x = 0; x < 3; x++) {
    for (int y = 0; y < 3; y++) {
        Vector3Int pos = new Vector3Int(x, y, 0);
        if ((x + y) % 2 == 0) {
            tilemap.SetTile(pos, tile);
        }
    }
}
int count = 0;
foreach (var pos in tilemap.cellBounds.allPositionsWithin) {
    if (tilemap.GetTile(pos) != null) count++;
}
Debug.Log(count);
A4
B5
C9
D6
Attempts:
2 left
💡 Hint

Count how many positions satisfy (x + y) % 2 == 0 in a 3x3 grid.

Practice

(1/5)
1. What is the main purpose of a Tilemap in Unity?
easy
A. To manage 3D models and animations
B. To optimize network communication
C. To handle player input events
D. To create 2D game worlds using a grid of tiles

Solution

  1. Step 1: Understand Tilemap functionality

    Tilemaps are used to build 2D game worlds by arranging tiles on a grid.
  2. Step 2: Compare options with Tilemap purpose

    Only To create 2D game worlds using a grid of tiles describes creating 2D worlds with tiles, matching Tilemap's role.
  3. Final Answer:

    To create 2D game worlds using a grid of tiles -> Option D
  4. Quick Check:

    Tilemap = 2D grid of tiles [OK]
Hint: Tilemaps = 2D grids for game worlds [OK]
Common Mistakes:
  • Confusing Tilemap with 3D model management
  • Thinking Tilemap handles input or networking
2. Which of the following is the correct way to place a tile at position (2, 3) on a Tilemap named 'tilemap' in Unity C#?
easy
A. tilemap.SetTile(new Vector3Int(2, 3, 0), tile);
B. tilemap.SetTile(new Vector2(2, 3), tile);
C. tilemap.PlaceTile(2, 3, tile);
D. tilemap.AddTile(new Vector3(2, 3, 0), tile);

Solution

  1. Step 1: Recall Tilemap SetTile method signature

    SetTile requires a Vector3Int for grid position and a TileBase object.
  2. Step 2: Check each option's method and parameters

    tilemap.SetTile(new Vector3Int(2, 3, 0), tile); uses SetTile with Vector3Int(2,3,0), which is correct. Others use wrong methods or Vector2.
  3. Final Answer:

    tilemap.SetTile(new Vector3Int(2, 3, 0), tile); -> Option A
  4. Quick Check:

    SetTile(Vector3Int, TileBase) = correct syntax [OK]
Hint: Use Vector3Int for tile positions in SetTile [OK]
Common Mistakes:
  • Using Vector2 instead of Vector3Int for position
  • Using non-existent methods like PlaceTile or AddTile
3. What will be the result of this code snippet in Unity?
for (int x = 0; x < 3; x++) {
    for (int y = 0; y < 2; y++) {
        tilemap.SetTile(new Vector3Int(x, y, 0), tile);
    }
}
medium
A. Tiles placed at positions (0,0), (0,1), (1,0), (1,1), (2,0), (2,1)
B. Tiles placed only at (0,0) and (1,1)
C. Tiles placed at positions (0,0), (1,0), (2,0) only
D. No tiles placed due to syntax error

Solution

  1. Step 1: Analyze the nested loops and tile positions

    The outer loop runs x from 0 to 2 (3 times), inner loop runs y from 0 to 1 (2 times). Each iteration places a tile at (x,y).
  2. Step 2: List all tile positions placed

    Positions: (0,0), (0,1), (1,0), (1,1), (2,0), (2,1).
  3. Final Answer:

    Tiles placed at positions (0,0), (0,1), (1,0), (1,1), (2,0), (2,1) -> Option A
  4. Quick Check:

    Nested loops fill grid area = positions listed [OK]
Hint: Nested loops fill all grid positions in range [OK]
Common Mistakes:
  • Miscounting loop ranges or tile positions
  • Assuming only diagonal tiles placed
4. Identify the error in this Unity C# code that tries to fill a 2x2 area with tiles:
for (int x = 0; x <= 2; x++) {
    for (int y = 0; y <= 2; y++) {
        tilemap.SetTile(new Vector3Int(x, y, 0), tile);
    }
}
medium
A. The loops should use < instead of <= to avoid infinite loop
B. The loops run too many times, placing tiles in a 3x3 area instead of 2x2
C. The tilemap variable is not initialized
D. The SetTile method is called with wrong parameters

Solution

  1. Step 1: Check loop conditions and iterations

    Loops use <= 2, so x and y go from 0 to 2 inclusive, which is 3 iterations each.
  2. Step 2: Calculate total tiles placed

    3 x 3 = 9 tiles placed, which is a 3x3 area, not 2x2.
  3. Final Answer:

    The loops run too many times, placing tiles in a 3x3 area instead of 2x2 -> Option B
  4. Quick Check:

    Loop <= 2 means 3 iterations, not 2 [OK]
Hint: Use < for loop limits to match area size [OK]
Common Mistakes:
  • Using <= instead of < causing extra iterations
  • Assuming loops run only 2 times when they run 3
5. You want to create a checkerboard pattern on a 4x4 Tilemap grid using two tiles: tileA and tileB. Which code snippet correctly sets tiles so that adjacent tiles alternate between tileA and tileB?
hard
A. for (int x = 0; x < 4; x++) { for (int y = 0; y < 4; y++) { tilemap.SetTile(new Vector3Int(x, y, 0), y % 2 == 0 ? tileA : tileB); } }
B. for (int x = 0; x < 4; x++) { for (int y = 0; y < 4; y++) { tilemap.SetTile(new Vector3Int(x, y, 0), x % 2 == 0 ? tileA : tileB); } }
C. for (int x = 0; x < 4; x++) { for (int y = 0; y < 4; y++) { tilemap.SetTile(new Vector3Int(x, y, 0), (x + y) % 2 == 0 ? tileA : tileB); } }
D. for (int x = 0; x < 4; x++) { for (int y = 0; y < 4; y++) { tilemap.SetTile(new Vector3Int(x, y, 0), tileA); } }

Solution

  1. Step 1: Understand checkerboard pattern logic

    Checkerboard alternates tiles so adjacent tiles differ. Using (x + y) % 2 == 0 alternates tiles diagonally and horizontally.
  2. Step 2: Evaluate each option's tile assignment

    for (int x = 0; x < 4; x++) { for (int y = 0; y < 4; y++) { tilemap.SetTile(new Vector3Int(x, y, 0), (x + y) % 2 == 0 ? tileA : tileB); } } uses (x + y) % 2 to alternate tileA and tileB correctly. The options using x % 2 or y % 2 alone create stripes by row or column, not checkerboard. for (int x = 0; x < 4; x++) { for (int y = 0; y < 4; y++) { tilemap.SetTile(new Vector3Int(x, y, 0), tileA); } } uses only tileA.
  3. Final Answer:

    for (int x = 0; x < 4; x++) { for (int y = 0; y < 4; y++) { tilemap.SetTile(new Vector3Int(x, y, 0), (x + y) % 2 == 0 ? tileA : tileB); } } -> Option C
  4. Quick Check:

    Checkerboard = alternate tiles by (x + y) parity [OK]
Hint: Use (x + y) % 2 to alternate tiles in grid [OK]
Common Mistakes:
  • Alternating only by x or y, not both
  • Using same tile everywhere
  • Forgetting to use modulo for pattern
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard