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.
Görev
KolayGrunt 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:
Wave.csiçinde Wave’i,enemy(bir Enemy: prefab),count(bir int) vespacing(bir float, iki düşman arasındaki saniye) genel alanlarına sahip serileştirilebilir bir sınıf yap.WaveSpawneriçinde serileştirilmiş üç özel alan ekle:waves(birList<Wave>),waypoints(bir Transform dizisi) vetimeBetweenWaves(bir float).Startiçinden dalgaları sırayla dolaşan bir coroutine çalıştır. Her dalga için:timeBetweenWaveskadar bekle, dalganın numarasını 1’den başlayarakWave 1biçiminde kayda geçir, ardındancountkadar düşmanını ilk waypoint’te oluştur, her birinewaypointsdeğerini ver ve her düşmandan sonraspacingkadar bekle.- Son dalgadan sonra
All waves sentifadesini 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
{
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.