Quick answer: Unity Tilemap Rule Tile producing wrong sprite variants after a scripted bulk paint? Bulk APIs don’t auto-trigger rule re-evaluation — call RefreshAllTiles.

A level generator paints terrain via SetTilesBlock. The auto-tile rules produce default tiles instead of context-aware variants.

RefreshAllTiles Forces Rule Eval

tilemap.SetTilesBlock(bounds, ruleTiles);
tilemap.RefreshAllTiles();

Forces every rule to re-evaluate neighbors. Tile sprites update to match the new context.

Per-Tile Refresh

For targeted updates: tilemap.RefreshTile(position). Costs less than full refresh on large maps.

Rule Tile Patterns

Each rule has neighbor patterns (above, below, etc.). Make sure the rule set covers the variants you expect. Missing patterns default to the ‘any’ tile.

Update on Modify

Editor painting auto-refreshes. Runtime API doesn’t. Same painted result in editor and script requires the explicit refresh.

Verifying

Bulk-painted areas show correct rule tile variants — corners, edges, interiors auto-select correctly.

“Bulk paint APIs skip rule eval. RefreshAllTiles after script paints.”

Build a tiny PaintAndRefresh helper — takes a bounds, paint data, calls SetTilesBlock + RefreshAllTiles. Consumers can’t forget the refresh.