Instantiating & Destroying Gameobjects in Unity
Day 7- Making 2D Space Shooter Game
Instantiate is a method that brings a GameObject into existence. So basically it is a method used for cloning of objects in your project.
We call Instantiate() method in our script. It is available in MonoBehaviour, takes in a GameObject as a parameter, so it knows which GameObject to create or duplicate. We use prefabs as our GameObject to Instantiate.
Prefabs are a special type of component that allows fully configured GameObjects to be saved in the Project for reuse. These assets can then be shared between scenes, or even other projects without having to be configured again. In simpler terms, It is a gameobject that contains all the components and functionalities when created in a game.
Here, _laserPrefab is a variable of type GameObject which contains the prefab to Instantiate, transform.position sets the position to the created gameobject. Here, I am using Instantiate inside another gameobject so I am using the position of parent gameobject. Quaternion.identity is used to set the prefab to no rotation. Otherwise the instantiated object will have same rotation as of prefab.
If you want to define your own position then you can do it by adding a new Vector position but if you do as above then the instantiated gameobject will always spawn at the same position of (0,0.8f,0).
Since I am creating a Space shooter game and I am trying to Instantiate a laser from Player script when the player press space key, I am taking the current position of player and spawning the laser 0.8f value above in y-axis from the origin of the player without rotation.
Here, This script is written in the Laser script which is a component of laser prefab. As you can see, I am using transform.Translate to move my laser upwards like when the player is shooting.
The if condition checks the position of the laser in y-axis and if it is greater than 8.0(value when laser goes outside of screen) then it destroys the gameobject.
Destroy() method deletes the gameobject from the scene view and the parameter it takes is the gameobject it is going to remove.
In above image, I am removing the current gameobject when it reaches 8.0 in y-axis but you can explicitly tell which gameobject to remove and it isn’t bound to current gameobject only.