apb007 Ответов: 0

Как сделать бесконечную волну выживания в следующем уже разработанном коде?


Привет,
В настоящее время я пытаюсь сделать своего рода io-версию call of duty zombies и dying light. Пока все идет хорошо, пока я не наткнулся на эту загвоздку.
Я хотел бы сделать 2 режима: 1) открытый мир, где квесты могут быть завершены *вроде как Умирающий свет иш*
2) основанная на карте выживания вещь, такая как COD: zombies, где вы можете купить льготы и оружие со стен и использовать таинственный ящик
Я пытаюсь сделать волны, в которых зомби появляются бесконечно, а также пытаюсь увеличить их сложность (то есть количество врагов в каждой волне увеличивается на 3 (начиная с 4 для раунда 1), пока игрок не достигнет волны 50, где количество зомби будет одинаковым для каждой волны, пока игрок не умрет. И скорость, с которой они нерестятся, уменьшается на 0,01 секунды с 1 секунды между каждым спавном до 0,5 секунды за спавн. который закончится в раунде 50 и будет через 0,5 секунды оттуда).

В настоящее время я получил так называемые "раунды" для работы таким образом, что они должны быть вручную установлены мной перед началом игры (где я также должен указать количество врагов для каждой волны и время между каждым появлением в секундах). У меня также есть два разных типа врагов. "бегун" и "скотина"." Я хочу указать в коде раунды (как у меня), в которых появляется зверь, а затем сказать, что бегуны появляются через каждый второй раунд. Вот код, который у меня сейчас есть:

Любая помощь очень ценится. p.s. Я не получаю никаких ошибок :)
Огромное спасибо. - РЕКЛАМНЫЕ ПЛАКАТЫ

Что я уже пробовал:

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class Spawner : MonoBehaviour
{    
    public Wave[] waves;
    public Jogger jogger;
    public Brute brute;
    
    Wave currentWave;
    int currentWaveNumber;

    int enemiesRemainingToSpawn;
    int enemiesRemainingAlive;
    float nextSpawnTime;    

    //text wave number
    public Text currentWaveDisplay;
    bool waveComplete;

    //text next wave countdown timer ****
    public Text countdownText;
    public int timeLeft = 3;

    //enemies remaining display
    public Text enemiesRemaining;

    void Start()
    {
        NextWave();
        currentWaveNumber = 1;
        //timer
        StartCoroutine("LoseTime");

    }

    void Update()
    {
        //timer display
        countdownText.text = "Wave Starting In: " + timeLeft;
        if (timeLeft <= 0)
        {
            StopCoroutine("LoseTime");
            countdownText.text = "Wave has begun!";
        }

        if (timeLeft <= 0)
        {

            //rounds and special brute rounds
            if (enemiesRemainingToSpawn > 0 && Time.time > nextSpawnTime)
            {
                if (currentWaveNumber < 6)
                {
                    enemiesRemainingToSpawn--;
                    nextSpawnTime = Time.time + currentWave.timeBetweenSpawns;

                    Jogger spawnedEnemy = Instantiate(jogger, Vector3.zero, Quaternion.identity) as Jogger;
                    spawnedEnemy.OnDeath += OnEnemyDeath;
                }
                if (currentWaveNumber == 6)
                {
                    enemiesRemainingToSpawn--;
                    nextSpawnTime = Time.time + currentWave.timeBetweenSpawns;

                    Brute spawnedEnemy = Instantiate(brute, Vector3.zero, Quaternion.identity) as Brute;
                    spawnedEnemy.OnDeath += OnEnemyDeath;
                }
                if (currentWaveNumber > 6 && currentWaveNumber < 11)
                {
                    enemiesRemainingToSpawn--;
                    nextSpawnTime = Time.time + currentWave.timeBetweenSpawns;

                    Jogger spawnedEnemy = Instantiate(jogger, Vector3.zero, Quaternion.identity) as Jogger;
                    spawnedEnemy.OnDeath += OnEnemyDeath;
                }
                if (currentWaveNumber == 11)
                {
                    enemiesRemainingToSpawn--;
                    nextSpawnTime = Time.time + currentWave.timeBetweenSpawns;

                    Brute spawnedEnemy = Instantiate(brute, Vector3.zero, Quaternion.identity) as Brute;
                    spawnedEnemy.OnDeath += OnEnemyDeath;

                }
                
            }
            
        }
        if (currentWaveNumber == 1)
        {
            currentWaveDisplay.text = "I"; 

            waveComplete = false;
        }
        if (waveComplete = true && currentWaveNumber == 2)
        {
            currentWaveDisplay.text = "II";

            waveComplete = false;
        }
        if (waveComplete = true && currentWaveNumber == 3)
        {
            currentWaveDisplay.text = "III";

            waveComplete = false;
        }
        if (waveComplete = true && currentWaveNumber == 4)
        {
            currentWaveDisplay.text = "IV";

            waveComplete = false;
        }
        if (waveComplete = true && currentWaveNumber == 5)
        {
            currentWaveDisplay.text = "V";

            waveComplete = false;
        }
        if (waveComplete = true && currentWaveNumber == 6)
        {
            currentWaveDisplay.text = "VI";

            waveComplete = false;
        }
        if (waveComplete = true && currentWaveNumber == 7)
        {
            currentWaveDisplay.text = "VII";

            waveComplete = false;
        }

        //enemies remaining display
        enemiesRemaining.text = "Enemies Remaining: " + enemiesRemainingAlive;
       
    }

        
    //timer delay
    IEnumerator LoseTime ()
    {
        while (true)
        {
            yield return new WaitForSeconds(1);
            timeLeft--;
        }
    }

    void OnEnemyDeath()
    {
        enemiesRemainingAlive--;

        if (enemiesRemainingAlive == 0)
        {
            waveComplete = true;
            timeLeft = 3;
            StartCoroutine("LoseTime");
            
            NextWave();
            
        }
    }

    void NextWave()
    {

        currentWaveNumber++;
        //fix auto change of number of enemies
        //fix auto change of timebetweenspawns
        print("Wave: " + currentWaveNumber);
        if (currentWaveNumber - 1 < waves.Length)
        {
            currentWave = waves[currentWaveNumber - 1];

            enemiesRemainingToSpawn = currentWave.enemyCount;
            enemiesRemainingAlive = enemiesRemainingToSpawn;
        }
    }

    [System.Serializable]
    public class Wave
    {
        public int enemyCount = 4;
        public float timeBetweenSpawns = 1;
        
    }

}

0 Ответов