Para obtener una matriz con todos los mosaicos de un área rectangular de su mosaico, use tilemap.GetTilesBlock(BoundsInt bounds)
. Obtendrá una matriz unidimensional de mosaicos, por lo que debe saber por sí mismo cuándo comienza la siguiente fila de mosaicos. Cualquier celda vacía se representará con un null
valor.
Si quieres todas las fichas, úsalas tilemap.cellBounds
. Esto le proporciona un BoundsInt
objeto que cubre el área completa utilizada del mosaico. Aquí hay un script de ejemplo que obtiene todos los mosaicos del mapa de mosaicos en el mismo objeto del juego y enumera los mosaicos con sus 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)");
}
}
}
}
}
Con respecto a los límites y por qué podría obtener más fichas de lo que espera: Conceptualmente, los mapas de fichas de Unity tienen un tamaño ilimitado. El cellBounds
cultivo, según sea necesario cuando pintas azulejos, pero no se contraen de nuevo si los borre. Entonces, cuando su juego tiene un tamaño de mapa bien definido, puede obtener algunas sorpresas si alguna vez se resbala mientras edita mapas. Hay tres formas de solucionar este problema:
GetComponent<Tilemap>()
.