Kill object after time

So, I have a projectile prefab that is shot both by the player and by the turrets of my game. When I instance the prefab in the two different scripts, I give them two different tags, “wormProjectile” and “enemyProjectile”. Because I didn’t want to projectile to live forever, I attached a script to the prefab meant to kill it after a certain amount of time. I wanted the projectiles fired by the turrets to live a different length of time than the ones fired by the player, so I tried using the following script:

var lifetimeP = 1.0;
var lifetimeE = 2.0;

function Awake ()
{
	if (gameObject.CompareTag ("wormProjectile"))
	{
		Destroy (gameObject, lifetimeP);
	}
	if (gameObject.CompareTag ("enemyProjectile"))
	{
		Destroy (gameObject, lifetimeE);
	}
}

But it never goes into the if statements. I am sure my mistake is something simple, but can anyone help me? Thank you! I really appreciate it.

I suspect Awake is called during Instantiate, and your problem seems to confirm that: since you set the tag after Instantiate, Awake only sees the original prefab tag.

A direct solution would be to change the routine from Awake to Start. A better solution, however, would be to fire the projectile and call Destroy in the same code - each shooting code would set the appropriate life time right after the projectile birth.

Your worm shooting script, for instance, would become something like this:

    ...
    bullet = Instantiate(prefab, ...);
    Destroy(bullet, 1); // if bullet isn't a GameObject, use bullet.gameObject
    bullet.tag = "wormProjectile";
    ...