Assigning UVs to mesh

According to the docs and error messages I’ve seen, Unity’s Mesh.uv should be the same length as Mesh.vertices. This seems wrong to me. UV maps usually have more vertices than the actual mesh due to duplication of vertices at seams.

Going through a collada file for example, there’s a UV co-ordinate (Vector2) for each vertex in each triangle. That gives a total of 3 times the number of mesh triangles. This makes more sense to me.

So, how exactly should one go about assigning UVs to a mesh in unity? All the examples I’ve been able to find on google are of simple planes with no seams, hence no vertex duplication. Could someone please provide an example with a more complex mesh? A cube perhaps.

Oh another source of confusion for me is the fact that unity’s normals are assigned per-vertex not per-face. Is there a way to convert from per-face to per-vertex?

Information given in comments helped explain how a Unity Mesh is defined:

In Unity, each vertex is assigned position, UV, normal, tangent, colour. A shared vertex is only imagined, it may have the same position as another vertex, but different UV, normal and tangent, therefore is it’s own entry in the mesh data array. A vertex is split into multiple ones if any of the other data needs to be unique.

Perhaps this video will explain better : Unite 2015 - A coder's guide to spline-based procedural geometry - YouTube