How to iterate a Tilemap


Sometimes you need to perform an action on all the tiles in a tilemap — for example, to save all the tile data in a serialized class so you can save and load a tilemap from disk.

You can do this using the helper method IterateTilemapWithAction in TilemapUtils.

[System.Serializable]
public class TilemapSerializedData
{
    [System.Serializable]
    public class TileData
    {
        public int gridX;
        public int gridY;
        public uint tileData;
    }

    public List<TileData> tileDataList = new List<TileData>();
}

public static TilemapSerializedData SerializeTilemap(STETilemap tilemap)
{
    TilemapSerializedData data = new TilemapSerializedData();
    System.Action<STETilemap, int, int, uint> action = (tmap, gridX, gridY, tileData) =>
    {
        data.tileDataList.Add(new TilemapSerializedData.TileData() { gridX = gridX, gridY = gridY, tileData = tileData });
    };
    TilemapUtils.IterateTilemapWithAction(tilemap, action);
    return data;
}