How to instantiate a prefab without showing it straight away

I am trying to create something similar as Mario Kart.

So when picking up the powerup (for let’s say the green shield) I want to create it so the player can see he has the green shield. But I don’t want to fire it yet.

My code:

private void PickUp(PowerUp item)
{
	if (Weapons == 1 && weapons[0] == null)
	{
		weapons[0] = item;
	}
}

// in Update
if (Input.GetKeyDown(KeyCode.F))
	{
		if (Weapons == 1 && weapons[0] != null)
		{
			Instantiate(weapons[0], transform.forward, transform.rotation);
			weapons[0] = null;
		}
	}

As you can see I want to create it in a way all PowerUps can be instantiated and eventually karts might have multiple weapons.

What is the best way to approach this?

Do I need to Instantiate it beforehand and just not render it and put scripts on inactive?

Hmm…I’m not too sure whether this will work or not, but how about storing the power ups in a array?

Like this:

public GameObject[] PowerUps;

Then whenever you fire them just delete the powerup from the array or something.
Hope it helps?