Verwenden Sie, um ein Array mit allen Kacheln aus einem rechteckigen Bereich Ihrer Kachelkarte zu erhalten tilemap.GetTilesBlock(BoundsInt bounds)
. Sie erhalten eine eindimensionale Anordnung von Kacheln, sodass Sie selbst wissen müssen, wann die nächste Kachelreihe beginnt. Alle leeren Zellen werden mit einem null
Wert dargestellt.
Wenn Sie alle Kacheln möchten , verwenden Sie tilemap.cellBounds
. Dadurch erhalten Sie ein BoundsInt
Objekt, das den gesamten verwendeten Bereich der Tilemap abdeckt. Hier ist ein Beispielskript, das alle Kacheln aus der Tilemap auf demselben Spielobjekt abruft und die Kacheln mit ihren Koordinaten auflistet:
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)");
}
}
}
}
}
In Bezug auf die Grenzen und warum Sie möglicherweise mehr Kacheln erhalten als erwartet: Konzeptionell haben Unity Tilemaps eine unbegrenzte Größe. DascellBounds
wachsen nach Bedarf, wenn Sie Fliesen bemalen, aber sie schrumpfen nicht wieder, wenn Sie sie löschen. Wenn Ihr Spiel eine genau definierte Kartengröße hat, können Sie einige Überraschungen erleben, wenn Sie beim Bearbeiten von Karten jemals ausrutschen. Es gibt drei Möglichkeiten, um dieses Problem zu umgehen:
- Anruf
tilemap.CompressBounds()
an, um die Grenzen der äußersten Kacheln wiederherzustellen (in der Hoffnung, dass Sie daran gedacht haben, sie zu löschen)
- Erstellen Sie das
bounds
Objekt selbst, new BoundsInt(origin, size)
anstatt sich darauf zu verlassencellBounds
.
- setze
tilemap.origin
und tilemap.size
auf die gewünschten Werte und rufe dann auf tilemap.ResizeBounds()
.
GetComponent<Tilemap>()
.