- Home /
Instantiate UI object as child of panel relative to panel's location
I am having difficulty instantiating a Text object as a child of a panel. The position parameter appears to place it's position with respect to the canvas and not the panel I am specifying.
I have a prefab ScoreboardNameTMPText of type TextMeshProUGUI.
Instantiate(ScoreboardNameTMPText, new Vector3(0, 0, 0), Quaternion.identity, ScoreboardPanel.transform);
Does not place the text at the 0,0,0 location of the panel, but rather at the 0,0,0 location of the canvas.
If the prefab is placed in the panel in the editor, (0,0,0) refers to the panel, not the canvas.
How can I instantiate this UI prefab with a position wrt it's parent panel?
As a follow up one of the overloads for instantiate makes no sense to me:
public static Object Instantiate(Object original, Transform parent, bool instantiateInWorldSpace);
instantiateInWorldSpace Pass true when assigning a parent Object to maintain the world position of the Object, ins$$anonymous$$d of setting its position relative to the new parent. Pass false to set the Object's position relative to its new parent.
That's great, but this constructor has no position parameter...
Answer by DanielAllison · Aug 24, 2018 at 08:12 AM
Rather than setting the position when instantiating, only set the parent with this constructor:
public static Object Instantiate(Object original, Transform parent);
Then, set the local position, which is the position relative to the parent, like this:
var scoreboardText = Instantiate(ScoreboardNameTMPText, ScoreboardPanel.transform);
scorebaordText.transform.localPosition = new Vector3(0, 0, 0);
Your answer
Follow this Question
Related Questions
Instantiate as a child? 3 Answers
Destroying childs and Instantiate [C#] 0 Answers
How can I Instantiate a clone as a child of another object, and inherit the parent object's scale? 2 Answers
Instantiate as child 3 Answers
How do I allocate a parent to a gameobject that just got instantiated? 2 Answers