private IEnumerator Spawn(WaveSO wave) { foreach (var enemy in wave.waveSettings) { for (int i = 0; i < enemy.Value; i++) { yield return(new WaitForSeconds(wave.delayBetweenSpawn)); var obj = Instantiate(enemy.Key.enemyPrefab); obj.transform.position = transform.position; OnSpawn?.Invoke(obj); } } }
private IEnumerator SpawnWave() { PlayerStats.Wave++; waveText.text = $"Wave: {PlayerStats.Wave}/{waveSOHolder.Objects.Count}"; WaveSO wave = waveSOHolder.Objects[waveIndex]; EnemiesAlive += wave.count; countdown = waveSOHolder.Objects[waveIndex].duration; waveIndex++; for (int i = 0; i < wave.count; i++) { SpawnEnemy(wave.enemySO); yield return(new WaitForSeconds(1f / wave.spawnRate)); } }
IEnumerator spawnWave(int index) { WaveSO wave = waves[index]; for (int i = 0; i < wave.waveElements.Count; i++) { wavePart element = wave.waveElements[i]; int delay = element.delay; for (int j = 0; j < element.amount; j++) { enemyCount++; Transform spawnPoint = spawnPoints[Random.Range(0, spawnPointCount)]; Instantiate(enemyPrefab, spawnPoint); yield return(new WaitForSeconds(delay)); } } }
void SpawnOnce() { if (currentUnitOnField < maxUnitOnField) { WaveSO wave = GetLevelEvent(); if (wave == null) { GameObject[] objstoSpawn = System.Array.FindAll <GameObject>(enemyTypes, unit => unit.GetComponent <EnemyBase>().enemyParam.minWaveToSpawn <= playerParam.waveCount); int randomUnits = Random.Range(1, 3);//спаунить рандомно от 1 до 2-х юнитов for (int i = 0; i < randomUnits; i++) { SpawnUnit(objstoSpawn[Random.Range(0, objstoSpawn.Length)]);//с большей вероятностю должны спаунится начальные враги и с меньшей сложные. } } else { for (int i = 0; i < wave.enemyCount; i++) { SpawnUnit(wave.enemyGO);//желательно что бы вся волна считалась за 1-го юнита. } } } waveSlider.value = (float)enemySpawned / maxUnitPerWave; }
public void SpawnWave(WaveSO wave) { StartCoroutine(Spawn(wave)); }