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.