instantiated UI Text prefab ignores provided position and uses prefab's original position
Hi,
I have managed to instantiate a prefab containing a sprite at a random position on the screen using :
Vector2 randomPositionOnScreen = Camera.main.ViewportToWorldPoint(new Vector2(Random.value, Random.value));
Instantiate(myPrefab, randomPositionOnScreen, Quaternion.Euler(0, 0, 0));
But when I repeat above code for a UI Text element the result is that the instantiated Text prefab ignores the provided position and instead uses the prefab's original position. ( I know that I have to parent the instantiated UI element to its Canvas element )
Vector2 randomPositionOnScreen = Camera.main.ViewportToWorldPoint(new Vector2(Random.value, Random.value));
GameObject instantiatedObject = Instantiate(myTextPrefab, randomPositionOnScreen, Quaternion.Euler(0, 0, 0));
instantiatedObject.transform.SetParent(GameObject.Find("Canvas").transform, false);
// AT THIS POINT THE UI TEXT APPEARS NOT IN ITS PROVIDED RANDOM POSITION BUT RATHER IN THE PREFAB'S ORIGINAL POSITION. IT IS AS IF THE 'randomPositionOnScreen' PART OF THE 'Instantiate(myTextPrefab, randomPositionOnScreen, Quaternion.Euler(0, 0, 0))' IS NOT THERE AT ALL.
// ONLY IF I UNCOMMENT FOLLOWING LINE DOES THE INSTANTIATED PREFAB MOVE TO THE RANDOM LOCATION WHICH I ASKED IT TO. BUT WHY DO I HAVE TO RE-SET ITS POSITION?
//instantiatedObject.transform.position = randomPositionOnScreen;
Can you please help me understand why? As I explain in the code comment above I know the workaround but I would like to understand why does this happen in the first place in depth. And why does instantiating a UI Text behaves differently in this regard compared to instantiating a GameObject ( which does what it is told : it positions itself to the transform provided in the Instantiate() )
Many thanks for your time