Drop item from airplane

Hello everyone. I am making a 3D shooter and have planes flying from the top of the sreen to the bottom, dropping a powerup somewhere along the z axis. The problem I’m having is that the powerup (crate) is being spawned before the plane flies across the screen so it looks like the powerup is appearing out of nowhere. How can I get it to spawn correctly?

function LevelEnd(){
	if(level == 1){
	CoastguardFire.canShoot = false;
		while(totalEnemies != level + 2){
			posX = Random.Range(-4.232903,4.232903);
			Instantiate(enemies[0],Vector3(posX, 0.1, 2.626708),transform.rotation);
			totalEnemies += 1;
		}
		while(totalPlanes != level){
			posY = Random.Range(2.787038, 5.503512);
			posX = Random.Range(-3.116441,1.936659);
			posZ = Random.Range(2.626708,-3);
			var crateType = Random.Range(0,2);
			Instantiate(planes[0],Vector3(posX, posY, 2.626708),Quaternion.Euler(Vector3(0,180,0)));
			totalPlanes += 1;
			Instantiate(crates[crateType],Vector3(posX,posY,posZ),transform.rotation);
		}
	}
}

you’re instantiating your crate and your plane at the same time, at different locations. As suggested above, you could use a yield WaitForSeconds with a random number from the minimum acceptable drop time to the max of how long the plane takes to cross the screen, then use:

var clone : RigidBody;

clone=Instantiate(planes[0],Vector3(posX,posY,2.626708),Quaternion.Euler(Vector3(0,180,0)));   

yield WaitForSeconds goes here;

Instantiate(crates[crateType],clone.transform.position,transform.rotation); 

something like this should do it I think