对于我的UI,有一个层次结构链创建如下
Emptypanel包含一个脚本,该脚本在运行时创建UI_A,父UI_A创建自身
GameObject UI_A= Instantiate(g);
UI_A.transform.position = transform.position;
UI_A.transform.SetParent(transform);
UI_A.transform.localScale = transform.localScale;
UI_A还包含一个创建UI_B的脚本,该脚本将自身附加到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);
}
并在UI_B构造函数中:
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;
}
因此,当offsetFromEdge为(0,0)时,UI_B在它应该的位置显得很好,就在UI_A之上,localPosition为(0,0,0)。但是,当我将offsetFromEdge的值设置为(1,1)时,UI_B localposition变得非常庞大(3611.xx,3611.xx,0);
这些值显示在RectTransform组件的Pos X和Pos Y上,我认为它与UI_B的transform.localPosition相同。
我不知道导致这种行为的原因。
答案 0 :(得分:2)
您首先设置游戏对象的世界位置然后更改其父级,这就是您没有获得所需位置的原因。您应首先设置父级,然后通过transform.localposition设置位置。