private IEnumerator Spawn(float p_delayTime, List <AIUnit> p_inactiveUnits, BSPRoom p_bspRoom) { yield return(new WaitForSeconds(p_delayTime)); List <Node> emptyNodes = _tilemapReader.GetEmptyNode(); if (emptyNodes != null && emptyNodes.Count > 0) { int randomSpawnUnit = Random.Range(0, 3); for (int i = 0; i < randomSpawnUnit; i++) { if (p_inactiveUnits.Count > 0) { AIUnit unit = p_inactiveUnits[0]; Node randomNode = emptyNodes[Random.Range(0, emptyNodes.Count)]; int randomXIndex = Random.Range(0, Mathf.RoundToInt(p_bspRoom.spaceRect.width)); int randomYIndex = Random.Range(0, Mathf.RoundToInt(p_bspRoom.spaceRect.height)); unit.transform.position = new Vector2(randomXIndex + p_bspRoom.spaceRect.x, randomYIndex + p_bspRoom.spaceRect.y); unit.gameObject.SetActive(true); unit.SetUp(waveIndex.ToString(), projectileHolder, player.transform); unit.OnDestroy += OnAIUnitDestroy; total_aiUnit.Add(unit); p_inactiveUnits.RemoveAt(0); } } } float randomDelayTime = Random.Range(0.3f, 3f); if (p_inactiveUnits.Count > 0) { StartCoroutine(Spawn(randomDelayTime, p_inactiveUnits, p_bspRoom)); } }