- 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
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