Untitled
unknown
csharp
a year ago
2.3 kB
31
Indexable
public class ConvertTilemapToGameObjects : MonoBehaviour
{
[SerializeField] private Tilemap _tilemap;
[SerializeField] private GameObject _container;
[SerializeField] private List<GameObject> _availableTiles;
private Dictionary<string, GameObject> _availableTilesDictionary = new Dictionary<string, GameObject>();
private void Start()
{
// Initialize the dictionary and convert the tilemap to game objects.
InitializeTileDictionary();
ConvertTilemap();
// Deactivate the original tilemap.
_tilemap.gameObject.SetActive(false);
}
private void InitializeTileDictionary()
{
_availableTilesDictionary = new Dictionary<string, GameObject>();
foreach (var tile in _availableTiles) _availableTilesDictionary.Add(tile.name, tile);
}
private void ConvertTilemap()
{
// Get the bounds of the tilemap.
BoundsInt _bounds = _tilemap.cellBounds;
// Iterate through the tilemap's tiles.
for (int z = _bounds.max.z; z >= _bounds.min.z; z--)
{
for (int y = _bounds.min.y; y < _bounds.max.y; y++)
{
for (int x = _bounds.min.x; x < _bounds.max.x; x++)
{
// Get the position of the current tile.
var tilePosition = new Vector3Int(x, y, z);
// Check if the tilemap has a tile at the current position
if (_tilemap.HasTile(tilePosition))
{
// Check if the tile is not in the dictionary.
if (!_availableTilesDictionary.ContainsKey(_tilemap.GetTile(tilePosition).name)) Debug.LogWarning("Tile " + _tilemap.GetTile(tilePosition).name + " not in dictionary");
// Instantiate the corresponding game object at the tile position.
Instantiate(_availableTilesDictionary[_tilemap.GetTile(tilePosition).name], _tilemap.CellToWorld(tilePosition) + new Vector3(0, 0.08f, 0), Quaternion.identity, _container.transform);
}
}
}
}
}
}Editor is loading...
Leave a Comment