So I was following a tutorial and noticed that the person used Transform to instantiate a new gameObject from a prefab:
private List<Transform> segments = new List<Transform>();
//segment prefab is a prefab added from the unity editor
public Transform segmentPrefab;
public void Grow()
{
Transform segment = Instantiate(segmentPrefab);
segment.position = segments[segments.Count - 1].position;
segments.Add(segment);
}
And after calling Grow from another function, a new GameObject that uses the segmentPrefab
prefab is instantiated and appeared on the screen.
I am aware of the fact that this person used generic method of instantiate, but I am confused about why instantiating Transform
creates a new GameObject
. I thought Transform
class only serves as a property of GameObject
, not a complete object. Do I have some misunderstanding of GameObjects
in unity?
CodePudding user response:
From Object.Instantiate
If you are cloning a Component the GameObject it is attached to is also cloned, again with an optional position and rotation.
When you clone a GameObject or Component, all child objects and components are also cloned with their properties set like those of the original object.
In simple words:
Because it wouldn't make any sense at all to create an instance of a Component
without that Component
being attached to any GameObject
.
-> What exactly would you do with only a Transform
(or any other Component
) that isn't attached to anything? ;)
That's also the reason why new
is forbidden on any class deriving from Component
as they need to be created by the underlying c engine and be connected to a GameObject
.
Have in mind that the entire Unity engine is actually in c
. Whatever you do in c#
is just an API layer on top of that c
engine core to make it easier to use for us developers