Is there a point in initiating Transform? Don’t all objects automatically have transform?
Instantiate(hello, new Vector3(x,y,0),Quaternion.identity);
Just to be clear, your’re not “initiating” a transform (and I am not entirely sure what you mean by that). Yes, all GameObjects have a transform. What this code appears to be doing is Instantiating (creating an instance of) a Prefab. This is to spawn a new game object into the scene.
And so I’m wondering why hello needed to be declared as Transform.
It doesn’t have to be declared as Transform. It could also have been GameObject, or some other component. The code appears to create 25 game objects, all clones of whatever object hello was set to. The Instantiate function returns a reference to the new object by the same type that was passed in, so for some cases it might be easier to use Transform rather than GameObject.
If hello is of type Transform, then you can imagine this code valid:
Transform clone = (Transform)Instantiate(hello);
clone.position = new Vector3(x,y,0);
If hello is of type GameObject, then you can imagine this code valid:
GameObject clone = (GameObject)Instantiate(hello);
clone.transform.position = new Vector3(x,y,0);
As you can see, if it was of type GameObject, and you were only interested in the transform part, then you need to access the transform of the game object yourself, resulting in some extra code.
The Type of hello restricts what objects you can set it via the inspector. Obviously all game objects have a transform, but if you had some code that only allowed to instantiate objects that had a renderer, you could have changed Transform to MeshRenderer for example. Now you could only set hello via the inspector if it has a MeshRenderer on it.