Pour obtenir un tableau avec toutes les tuiles d'une zone rectangulaire de votre tilemap, utilisez tilemap.GetTilesBlock(BoundsInt bounds)
. Vous obtiendrez un tableau unidimensionnel de tuiles, vous devez donc savoir par vous-même quand la prochaine rangée de tuiles commence. Toutes les cellules vides seront représentées avec une null
valeur.
Si vous voulez toutes les tuiles, utilisez tilemap.cellBounds
. Cela vous donne un BoundsInt
objet qui couvre toute la zone utilisée du tilemap. Voici un exemple de script qui récupère toutes les tuiles du Tilemap sur le même objet de jeu et répertorie les tuiles avec leurs coordonnées:
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)");
}
}
}
}
}
En ce qui concerne les limites et pourquoi vous pourriez obtenir plus de tuiles que vous attendez: Conceptuellement, les Tilemaps Unity ont une taille illimitée. Ils cellBounds
poussent au besoin lorsque vous peignez des carreaux, mais ils ne rétrécissent plus si vous les effacez. Ainsi, lorsque votre jeu a une taille de carte bien définie, vous pourriez obtenir des surprises si vous vous glissez lors de la modification des cartes. Il existe trois façons de contourner ce problème:
GetComponent<Tilemap>()
.