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.

Why are you using Transforms?

^That’s the correct way to set the position of UI.