- Home /
World Position Of Child Object Shifted After Parenting
For my UIs there is this chain of hierarchy created as follow
MainCanvas(screenspace-camera, with plane distance 0.31(near plane is 0.3))
EmptyPanel
UI_A(with rect transform) UI_B(with rect transform)
Emptypanel contains a script that creates UI_A at runtime and parent UI_A to itself
GameObject UI_A= Instantiate(g);
UI_A.transform.position = transform.position;
UI_A.transform.SetParent(transform);
UI_A.transform.localScale = transform.localScale;
UI_A also contain a script that create UI_B which will attach itself to UI_A
//script in UI_A
void Start () {
//float width = GetComponent<RectTransform>().rect.width;
//float height = GetComponent<RectTransform>().rect.height;
Vector3 pos = transform.position;
pos += new Vector3(offsetFromEdge.x, offsetFromEdge.y, 0f);
_UI_B = new UI_B(transform, pos);
}
and in UI_B constructor:
public UI_B(Transform parent, Vector3 pos)
{
GameObject obj = new GameObject();
obj.AddComponent<Canvas>();
var comp = obj.GetComponent<RectTransform>();
comp.pivot = Vector2.zero;
comp.anchorMin = Vector2.zero;
comp.anchorMax = Vector2.zero;
obj.transform.position = pos;
obj.SetParent(parent);
obj.localScale = scale;
}
So, when offsetFromEdge is (0,0), UI_B appear nice at where it should be, right on top of UI_A with localPosition being (0,0,0). However when i set the value of offsetFromEdge to (1,1), UI_B localposition become insanely huge (3611.xx, 3611.xx, 0);
These values are displayed on the RectTransform component's Pos X and Pos Y which i believe is the same a UI_B's transform.localPosition.
I have no idea what causes this behavior.
Answer by allenallenallen · Aug 13, 2015 at 10:35 AM
Why are you using Transforms?
http://docs.unity3d.com/ScriptReference/RectTransform-anchoredPosition.html
^That's the correct way to set the position of UI.
So i modify the code for UI_A to
UI_A.transform.SetParent(transform); UI_A.GetComponent().anchoredPosition = GetComponent().anchoredPosition;
but the position of UI_A is does not appeared at the position of its parent.
Your answer
![](https://koobas.hobune.stream/wayback/20220611235650im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Convert RectTransform rect to screen space 12 Answers
Display variable from parent in textbox 1 Answer
Child animator component is moving parent despite unchecking "Apply Root Motion" 1 Answer
Parent object is getting generated why ?? 1 Answer
Set the parent of children of a parent,How to set the children of a parent 1 Answer