Menu
CoddyTech

Dalgalar

Coddy'nin Unity Oyunu: Kule Savunması kursunda ders 4 / 18.

Düşmanlar dalgalar hâlinde gelir: yol boyunca aralıklarla dizilmiş aynı türden bir grup, ardından sonraki gruptan önce bir mola. Bir dalga birkaç sayıdan oluşur, bu yüzden [System.Serializable] bir sınıftır ve spawner, Inspector’ın doldurulacak satırlar olarak gösterdiği bir List<Wave> tutar. [System.Serializable] olmadan Unity bir Wave’i kaydedemez, Inspector listeyi göstermez ve liste boş kalır.

Zamanlama bir coroutine ile yapılır: düşman oluşturan ve ardından oyunun geri kalanını durdurmadan beklemek için new WaitForSeconds(...) ifadesine yield eden bir döngü. Bir havai fişek gösterisi de aynı şekilde atış grupları boyunca ilerler ve her birinin ardından duraklar:

IEnumerator Show()
{
    foreach (Salvo salvo in salvos)
    {
        for (int i = 0; i < salvo.rockets; i++)
        {
            Instantiate(rocketPrefab, launcher.position, Quaternion.identity);
            yield return new WaitForSeconds(salvo.gap);
        }
        yield return new WaitForSeconds(pause);
    }
}

Düşmanlar artık prefab. Bir prefab’ın alanları yalnızca varlıklara ve prefab’ın içindeki nesnelere başvurabilir; bu yüzden yeni bir düşmanın waypoints dizisi boştur. Yol spawner’a aittir ve spawner, Instantiate işleminden hemen sonra yolu her düşmana verir. Instantiate, kendisine verilen türü döndürür; bu nedenle türü Enemy olan bir prefab alanıyla, ayarlanmaya hazır yeni Enemy’yi döndürür.

challenge icon

Görev

Kolay

Grunt ve Runner artık prefab; kendi EnemyData’larına sahip bir Tank ve Boss da eklendi. Spawner nesnesi WP0 üzerinde duruyor. Düşmanları dalgalar halinde gönder:

  1. Wave.cs içinde Wave’i, enemy (bir Enemy: prefab), count (bir int) ve spacing (bir float, iki düşman arasındaki saniye) genel alanlarına sahip serileştirilebilir bir sınıf yap.
  2. WaveSpawner içinde serileştirilmiş üç özel alan ekle: waves (bir List<Wave>), waypoints (bir Transform dizisi) ve timeBetweenWaves (bir float).
  3. Start içinden dalgaları sırayla dolaşan bir coroutine çalıştır. Her dalga için: timeBetweenWaves kadar bekle, dalganın numarasını 1’den başlayarak Wave 1 biçiminde kayda geçir, ardından count kadar düşmanını ilk waypoint’te oluştur, her birine waypoints değerini ver ve her düşmandan sonra spacing kadar bekle.
  4. Son dalgadan sonra All waves sent ifadesini kayda geçir.

Inspector, oyunun sekiz dalgasını ve 8 saniyelik arayı ayarlar. Play’e basıp ilk dalgaların gelişini izle, ardından Check’e bas.

Kendin dene

using UnityEngine;

// Daha sonra gelecek: düşmanları dalgalar halinde yol boyunca gönderir.
public class WaveSpawner : MonoBehaviour
{
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Unity Oyunu: Kule Savunması bölümündeki tüm dersler