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.