I have got a game object of type 'plane' with a scale of X=24, Y=1, Z=10. It is a prefab and within a script I want to instantiate it several times but always as a direct neighbour (in Z direction) of the previous one. Actually I thought that I could simply take the position of the first instance, add 10/2 (Taking the scale of Z=10 as the width of the object and considering the pivot point in the middle of the plane) to position.z of the next instance and instantiate it beside the first one.

But when I start the script it seems (by my sense of proportion) that the different instances are all only positioned like 5% in Z direction to their predecessor.

So I am wondering what unit is used for scale? It seems that a value of 10 for scale doesn't mean a width or length or height of 10 units. But then, how can I get the width or length of a plane (or other object).

Scale is a multiplier of size. So, a scale of (1,1,1) means the object is shown in the original size of the mesh data. A scale of (2,2,2) makes it twice as large in all directions. If you have an object which has a width of exactly 1, then your logic would work. However, the built-in plane mesh is larger, I think it has a width of 5 or 10, IIRC. So you have to multiply that to your scale values to get the actual size of the object.

The problem is that the 'Plane' gameobject is not a "unit plane" the same way as the 'Cube' object is a "unit cube" in Unity. For some reason Unity internally scales up the size of all planes 10 times.

Try this: from an empty scene create a Cube and a Plane, and set both of their positions to (0, 0, 0). Notice that both gameobjects have a scale of (1, 1, 1) but the plane is much bigger than the cube. Now set the Cube's scale to (10, 10, 10) and notice the two objects are now the same size.

I have no idea why Unity treats planes different from other primitives. It's kind of annoying. So if you want to tile planes, you need to multiply your position transforms by 10 times as well.