Как сделать бесконечную волну выживания в следующем уже разработанном коде?
Привет,
В настоящее время я пытаюсь сделать своего рода 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; } }