Accessing 2D-tileset from other scripts

I apologize in advance for my newbie question, I spent several hours reading the forums and passing the tutorials, but I could not find the answer myself.

All I want is to be able to manage tiles from other scripts. I guess there should be an opportunity to give a command like “myMap.SetTile(cellPos, tileType);”. Unfortunately, I did not manage to get to work any piece of code with similar commands from those that I found on forums and in Unity manuals. Being a professional programmer, I, apparently, do not understand the basic concepts of the Unity engine.

I will be very grateful if you show me how to tell the system to set a tile at the address (1,1).

Hi @red_ohra

“myMap.SetTile(cellPos, tileType);”

I’m a bit perplexed - this actually works just like you describe. Maybe it is just something missing in your setup.

First get a ref to your tilemap object, then get some tile asset. I chose to just drag’n’drop both tilemap in scene and tile asset from asset folder. Then just place place the tile:

// in your class:
public Tilemap tileMap;	  // assign your tilemap here in inspector
public TileBase demoTile; // assign tile asset  here in inspector

// in some method:
// Set tile at current bounds min:
var bounds = tileMap.cellBounds;
Vector3Int pos1 = new Vector3Int(bounds.xMin, bounds.yMin, 0);
tileMap.SetTile(pos1, demoTile);

// Set tile at specific location x5, y5:
Vector3Int pos2 = new Vector3Int(5,5,0);
tileMap.SetTile(pos2, demoTile);

This should work and is pretty straightforward, although IIRC getting tiles is way more awkward…

If you just have problem with getting the tilemap in scene, itself, just instead of assigning it from inspector, do (assuming you have just one in your scene in this case):

tileMap = FindObjectOfType<Tilemap>();

Thank you so much! Indeed, the drag-and-drop trick worked, now I can generate maps. I hope that I will be able to cope with information about tiles too.

PS. The second way worked too.