- Home /
Instantiate an prefab as a child of the player
Hi, I am using oneshot particles to fire when the player level's up. The problem is that they contain a light to create a nice big effect, but when the player moves the light (and prefab) are left behind which looks odd while the particle fires.
I want to make the prefab follow the player, so I assume that the best way to do this is to make it a child of the gameobject of the player.
I tried using the following method.
Here I declare the public field to the inspector and then map the gameobjects to them
public Transform ParticleOneshotLevelUp;
public Transform GameObjectPlayerOne;
Then I use the following code to create the particle effect
(Instantiate(ParticleOneshotLevelUp, transform.position, transform.rotation) as GameObject).transform.parent = GameObjectPlayerOne.transform;
The problem is that the particle is indeed created, but not as a child, I get a object reference not set to an instance error, but it is assigned in the inspector, so I am a bit confused!
Any help would be greatly appreciated :)
Answer by Lachee1 · Jul 13, 2014 at 10:00 AM
What you have to do is set the instantiated objects parent to the player.
Here is some pseudo in C# on how to do it:
public Transform ParticleOneshotLevelUp;
public Transform GameObjectPlayerOne;
public void CreateEffect() {
GameObject particle = Instantiate(ParticleOneshotLevelUp, transform.position, transform.rotation) as GameObject;
particle.transform.parent = GameObjectPlayerOne;
}
You should also use GameObject to store your prefab, as Transform cannot access assets if I remember correctly.
So from
public Transform ParticleOneshotLevelUp;
To
public GameObject ParticleOneshotLevelUp;
Answer by tconti · Jul 13, 2014 at 03:03 PM
I know you got an answer, but another way to solve this is to make it a child of the prefab and have it set to inactive, then just activate it when you want it to show up.
Answer by NerdRageStudios · Jul 13, 2014 at 10:47 AM
Fantastic, that's just what I needed, thank you so much :)