Para obter uma matriz com todos os blocos de uma área retangular do seu mapa de blocos, use tilemap.GetTilesBlock(BoundsInt bounds)
. Você obterá uma matriz unidimensional de blocos, portanto precisará saber quando a próxima linha de blocos iniciar. Quaisquer células vazias serão representadas com um null
valor.
Se você quiser todas as peças, use tilemap.cellBounds
. Isso BoundsInt
gera um objeto que cobre toda a área usada do mapa de peças. Aqui está um exemplo de script que obtém todos os blocos do Tilemap no mesmo objeto de jogo e lista os blocos com suas coordenadas:
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)");
}
}
}
}
}
Em relação aos limites e por que você pode obter mais peças do que o esperado: conceitualmente, os Unity Tilemaps têm um tamanho ilimitado. A cellBounds
crescer conforme necessário, quando você pintar azulejos, mas eles não encolher novamente, se você apagá-las. Portanto, quando o seu jogo tiver um tamanho de mapa bem definido, você poderá ter algumas surpresas se escorregar durante a edição de mapas. Existem três maneiras de solucionar esse problema:
GetComponent<Tilemap>()
.