Geri Sayım
Coddy'nin Unity Oyunu: Kule Savunması kursunda ders 23 / 25.
Dalgalar arasında oyuncu inşa yapar ve geri sayım ne kadar süre kaldığını gösterir. Hazır olan bir oyuncu, bir düğmeyle sonraki dalgayı erkenden başlatabilir. Mola, null veren bir coroutine içindeki döngüdür; bu nedenle her karede bir kez çalışır: süreyi geri sayar, gösterir ve süre dolduğunda ya da düğme dalganın başlamasını istediğinde sona erer. Düğme yalnızca bir bool ayarlar ve döngü bu değeri okur:
while (left > 0f && !skipRequested)
{
// Kalan saniyeleri göster, geri say, bir kare bekle
}
skipRequested = false;Bool, kullanıldıktan sonra tekrar false olur; yoksa ilk moladan sonraki her mola hemen sona ererdi. Mathf.CeilToInt yukarı yuvarlar; bu nedenle kalan 2.3 saniye 3 olarak görünür. yield return StartCoroutine(Countdown()); geri sayımı çalıştırır ve bitmesini bekler.
Görev
ZorHer dalga için geri sayım yap; bir düğme dalgayı erken başlatır.
WaveSpawneriçinde serileştirilmişcountdownText(TMP_Text) venextWaveButton(GameObject),private bool callNow;vepublic void CallNextWave() { callNow = true; }ekle.yield return StartCoroutine(Countdown());ile break ifadesini değiştir: düğmeyi göster ve süre kaldığı vecallNowfalse olduğu sürece, her karede yukarı yuvarlanmış süreyiNext wave in 8olarak göster.- Ardından
callNowdeğerini tekrar false yap, metni temizle ve düğmeyi gizle.
“Oyna” düğmesine bas: Sonraki Dalga bekleme süresini atlar. Ardından “Kontrol et” düğmesine bas.
Kendin dene
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class WaveSpawner : MonoBehaviour
{
[SerializeField] private List<Wave> waves = new List<Wave>();
[SerializeField] private Transform[] waypoints;
[SerializeField] private float timeBetweenWaves = 8f;
void Start()
{
StartCoroutine(RunWaves());
}
IEnumerator RunWaves()
{
for (int i = 0; i < waves.Count; i++)
{
yield return new WaitForSeconds(timeBetweenWaves);
Debug.Log("Wave " + (i + 1));
Wave wave = waves[i];
for (int n = 0; n < wave.count; n++)
{
Enemy enemy = Instantiate(wave.enemy, waypoints[0].position, Quaternion.identity);
enemy.waypoints = waypoints;
yield return new WaitForSeconds(wave.spacing);
}
}
Debug.Log("All waves sent");
}
}
Unity Oyunu: Kule Savunması bölümündeki tüm dersler
Kendi başına pratik yap: Unity playground