示例#1
0
    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);
            }
        }
    }
示例#2
0
    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));
        }
    }
示例#3
0
    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));
            }
        }
    }
示例#4
0
 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;
 }
示例#5
0
 public void SpawnWave(WaveSO wave)
 {
     StartCoroutine(Spawn(wave));
 }