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 :slight_smile:

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;

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.

Fantastic, that’s just what I needed, thank you so much :slight_smile: