PackTextures: many materials or many meshes?

I have a game world consisting of tiles, and there are many kinds of tiles (and therefore many textures). A tile is just a two triangle square. I have packed the textures together using PackTexures and now I have a bunch of Rects.

To apply the packed texture correctly on each tile, I can do one of two things:

  • Create a new material for each kind of tile, with the offset set to the Rect’s position and the tiling set to the Rect’s size. This would result in dozens of materials.
  • Adjust the UV coordinates of the tile’s mesh for each kind of tile, scaling them by the Rect’s size and offsetting them by the Rect’s position. This would (I think) result in dozens of copied meshes that just have different UV coordinates.

This answer suggests that I should use the multiple materials approach. However, here on the forum it is suggested to change all the UV coordinates. Or, as Aras states it:

The packing idea is that you’ll end up with a single material (otherwise, if meshes will still use different materials, there’s not much point in packing).

It seems to me that materials are more lightweight and put less strain on the GPU than multiple meshes do, and therefore I’d be inclined to use multiple materials. What would be the best approach? Or are there any other smart things I could do with a Rect and a simple square mesh?

If you are generating the tiles in the scene via code then you can actually use this:
Material-mainTextureOffset

or something similar, to have only one mesh and one material and only change the offset via code.

If you are not generating the tiles via code then chose the material solution just for the sake of the final file size.