Untuk mendapatkan array dengan semua ubin dari area persegi panjang tilemap Anda, gunakan tilemap.GetTilesBlock(BoundsInt bounds)
. Anda akan mendapatkan array ubin satu dimensi, jadi Anda perlu tahu sendiri kapan baris ubin berikutnya dimulai. Setiap sel kosong akan diwakili dengan null
nilai.
Jika Anda ingin semua ubin, gunakan tilemap.cellBounds
. Ini memberi Anda BoundsInt
objek yang mencakup seluruh area tilemap yang digunakan. Berikut ini contoh skrip yang mendapatkan semua ubin dari Tilemap pada objek game yang sama dan mencantumkan ubin dengan koordinatnya:
using UnityEngine;
using UnityEngine.Tilemaps;
public class TileTest : MonoBehaviour {
void Start () {
Tilemap tilemap = GetComponent<Tilemap>();
BoundsInt bounds = tilemap.cellBounds;
TileBase[] allTiles = tilemap.GetTilesBlock(bounds);
for (int x = 0; x < bounds.size.x; x++) {
for (int y = 0; y < bounds.size.y; y++) {
TileBase tile = allTiles[x + y * bounds.size.x];
if (tile != null) {
Debug.Log("x:" + x + " y:" + y + " tile:" + tile.name);
} else {
Debug.Log("x:" + x + " y:" + y + " tile: (null)");
}
}
}
}
}
Mengenai batasan dan mengapa Anda mungkin mendapatkan ubin lebih dari yang Anda harapkan: Secara konseptual, Unity Tilemaps memiliki ukuran yang tidak terbatas. The cellBounds
tumbuh yang diperlukan ketika Anda cat ubin, tetapi mereka tidak menyusut lagi jika Anda menghapusnya. Jadi saat gim Anda memiliki ukuran peta yang terdefinisi dengan baik, Anda mungkin akan mendapatkan kejutan jika pernah terpeleset saat mengedit peta. Ada tiga cara untuk mengatasi masalah ini:
GetComponent<Tilemap>()
.