Why does localPosition only work when there is a parent object?
I'm a bit stumped about something here to do with transform.localPosition. I have a camera sometimes parented to a dummy object (and the dummy object moves around) and sometimes the camera is allowed to be "unparented" and move around on its own.
When the camera has a parent object and I change transform.localPosition.z the camera does what I expect and it changes z position "locally", meaning if it's angled in the world, it moves along its own z axis.
When the camera has no parent and I change transform.localPosition.z it instead moves along the world z axis. This is weird because despite not having a parent, the camera still has its own z axis and if I wanted to move it in world space I would change transform.position.z not transform.localPosition.z . Right??
Clearly I am missing some key concept here, but what?
(If anyone wants better context about what I am doing, my code below is getting touch gesture input and based on a 2-finger pinch/zoom scale multiplier I am moving my camera along z. This simulates zooming my world.
float scale = (gesture as ScaleGestureRecognizer).ScaleMultiplier - 1f;
Vector3 newPosition = Camera.main.transform.localPosition;
newPosition.z += scale;
Camera.main.transform.localPosition = newPosition;
O$$anonymous$$ so I see that the Unity manual explicitly states that this is expected behavriour:
"If the transform has no parent, it is the same as Transform.position."* https://docs.unity3d.com/ScriptReference/Transform-localPosition.html
So I'm left wondering WHY? If the gameobject has no explicit parent, isn't the "world" its parent? I would still expect to be able to transform x y or z positions based on its local orientation. How do I do that?
Answer by LilGames · May 01, 2018 at 06:02 PM
Researched and figured out I needed this instead:
float scale = (gesture as ScaleGestureRecognizer).ScaleMultiplier - 1f;
Camera.main.transform.Translate(0,0,scale);
Possibly also needs Time.DeltaTime factored in?
Your answer
Follow this Question
Related Questions
EdgeCollider2D for the same points as LineRenderer has different position 0 Answers
Rigidbody Velocity in Local Space? 0 Answers
Convert Local Position To Global on a Child Object 0 Answers
What's a difference between just Scale and localScale or Position and localPosition? 1 Answer
Don't understand parent vs child transform in world and localspace 1 Answer