Aby uzyskać tablicę ze wszystkimi kafelkami z prostokątnego obszaru mapy tilem, użyj tilemap.GetTilesBlock(BoundsInt bounds)
. Otrzymasz jednowymiarowy zestaw płytek, więc musisz wiedzieć sam, kiedy rozpocznie się następny rząd płytek. Wszelkie puste komórki będą reprezentowane przez null
wartość.
Jeśli chcesz wszystkie kafelki, użyj tilemap.cellBounds
. W ten sposób otrzymujesz BoundsInt
obiekt, który pokrywa cały wykorzystany obszar mapy tilem. Oto przykładowy skrypt, który pobiera wszystkie kafelki z Tilemapy na tym samym obiekcie gry i wyświetla kafelki z ich współrzędnymi:
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)");
}
}
}
}
}
Jeśli chodzi o granice i dlaczego możesz uzyskać więcej płytek, niż się spodziewasz: koncepcyjnie, Tilemaps Unity mają nieograniczony rozmiar. cellBounds
Rosną tak potrzebne podczas malowania płytek, ale nie kurczą się ponownie, jeśli je wymazać. Kiedy więc twoja gra ma dobrze zdefiniowany rozmiar mapy, możesz mieć pewne niespodzianki, jeśli poślizgniesz się podczas edytowania map. Istnieją trzy sposoby obejścia tego problemu:
GetComponent<Tilemap>()
.