You seem to confuse scale and size. They are two completely different ideas. The size of an object is measured in units. One unit in Unity is usually one meter, however that’s just convention with the physics system. In any other sense it’s just “one unit”.

The scale of an object is a unitless factor. By default an object usually has a scale of 1 in all axes. That means if an object has a size of 4.5 units in the x axis and has a scale of 1, the object will have an actual size in the world of 4.5 units. If you set the scale of that object to 2, it would have a size of 9.

Note that every gameobject creates its own coordinate system. This is where child objects “live” in. That coordinate system scales with the object. So is your object has a scale of 2, a step of 1 unit inside that coordinate space would actually move 2 units in world space.

When you import a model no one knows what internal unit has been used. In the end it’s just numbers. A modelling application might store the actual real world unit size inside some meta data. But in the end it doesn’t really matter. Unity allows to set a scale factor when you import a model. This allows you to scale the actual mesh data by some conversion factor. It’s always better when the gameobjects themselfs have a uniform scale of 1.

I don’t really get your example. If you have a gameobject with a uniform scale of 1 (so 1 on each axis) the size of a child object won’t change at all. So if you have a cube gameobject with scale of (1,1,1) and you add another cube gameobject as child which also has a scale of (1,1,1), the two cubes will have the exact same size. The default cube mesh in Unity has vertex coordinates that goes from -0.5 up to 0.5 which gives the object a “local” size of 1. Of course as already said when you scale the cube, you scale it’s local space with it. So if the outer cube has a scale of (2,2,2) it’s twice as big as it was before. The child cube which still has a scale of (1,1,1) would still have the same size as the parent cube since the coordinate system it lives in has been scaled up by a factor of 2.

Watch out: When you parent / unparent object in the hierarchy or by using transform.parent from code, Unity will actually try to adjust the scale of the child so the world space size stays the same. This is not possible in all cases but in most cases this works just fine. For example imagine two default cubes in the scene. We call one parent, the other child but for the time being they just sit next to each other and the child cube is not a child yet. Now when we scale up the parent to 2 it will be twice as big as the child since they are independent at the moment. Now when we drag the child onto the parent to actually make it a child, Unity will adjust the scale of the child so it keeps it’s original size. That means the child’s scale would be set to (0.5, 0.5, 0.5). As the child cube is now an actual child of the parent cube it automatically inherits the scale from the parent. Since it’s scaled down by a factor of 0.5 it’s still just one unit in size. However inside the coordinate system of the parent cube, the child cube only has a size of 0.5.

Please note that Unity does nothing special here. That’s how pretty much any gameengine works. This is just ordinary linear algebra. If you have issues with vectors, scaling, coordinate systems, etc I would recommend you watch the brilliant essence of linear algebra series of 3b1b. I’d like to add that even I learned most of that stuff over a decade ago, I’ve watched some of the videos already several times. It just helps to refine your understanding of things that might be considered trivial by some people. Especially when in comes to matrices in higher dimensions. There are so many different ways how you can interpret them.