I'm completely confused about the local and world coordinates of objects. I have a hierarchy of objects like this:
I add LeftTargetPrefab with the previously saved position (for example Vector3(10f, 10f, 10f)) to BallsPath and it is set correctly. But if I try to add LeftTargetPrefab to BallTargets, then the position is also set to Vector3(10f, 10f, 10f). If, while starting the game, I create a clone of LeftTargetPrefab and drag it into BallsTarget, the coordinates are converted to local coordinates correctly. How can I make sure that when adding to BallsTarget via Instantiate, the LeftTargetPrefab(Clone) position is immediately correctly recalculated to the local one?

Update after comments:
To instantiate the object relative to a new parent, use
Instantiate(originalObject, parentTransform, false. This call uses theinstantiateInWorldSpaceboolean to set the Object's position relative to its new parent, see the below mentioned link.Another thing: In your image,
LeftTargetPrefabis a child ofBallsPath. So it's coordinates are already not world coordinates anymore, but relative to its parent.When you say "add LeftTargetPrefab with the previously saved position" does this happen from script during runtime?
You could try the
instantiateInWorldSpaceoptions of Object.Instantiate. For this you would instantiate via the parentTransform(BallsTargetin this case, I guess).Another option would be to pass the parent's position and a possible offset in terms of local coordinates via the
Transform.localPositionetc of the parent object.