The original asker edited their question with the solution they used. However, as questions should not be edited to include the answers, I have removed the code to post as a community wiki.
The original asker reports that they used this code to meet their requirements:
function Update (){ for (var i =0; i < OppoCount.length ; i ++){ if(OppoCount.length > 0) { if (OppoCount[i].gameObject == null){ OppoCount.RemoveAt(i); } if(OppoCount.length < HowMany){ StartCoroutine ("Spawn"); } } } function Spawn(){ var length = Oppos.length - 1; var index = Mathf.Round(length*UnityEngine.Random.value); curSpawn = Oppos[index]; var xz = Random.insideUnitCircle * spawnSizeArea; var newPosition = Vector3(xz.x,0,xz.x) + transform.position; yield WaitForSeconds(Random.Range(2,4)); var newOp : GameObject = Instantiate(curSpawn, newPosition, transform.rotation); OppoCount.Push(newOp); StopCoroutine("Spawn"); }