Object won't pivot around parent - Instead they are transformed

This should be simple.

I wanted two objects to rotate around their parent empty object, instead the child objects get transformed and squashed, and aren’t rotated correctly. Not only that, the mesh and the colliders get all funny.

I imagine the solution is pretty simple, but I have no idea what is going on.

This is a typical scaling issue. Remember that parented objects transforms are always relative to their parents. If you move the parent object to position 30 on the X, the child object will still have position 0 in the inspector. The same goes for rotation and scale. It looks like your character object is scaled along the Y axis, and since shoulder is a child of that character, the child object will also scale along Y.

Unity will often attempt to fix this when childing an object. If you make a cube with scale 1,1,1 and then drop it as a child of a cube scaled 1,2,1 - it will look like nothing changed, but if you check the inspector you’ll notice that the child cube actually is scaled 1,0.5,1 now, because Unity assumes you want it to keep the same dimensions. This is all fine until you start manipulating the scale and or rotation of the parent.

The solution is easy, once you understand the problem. Personally I always try to make sure that any scaling I need to do is always made on the last node in a hierarchy. I usually stick empty gameobjects as nodes when building objects. You should have an object organised something like this. The objects I put in uppercase names are the objects you can scale and rotate. All other transforms should have rotation 0 and scale 1 across all axis.