Gelombang
Pelajaran 4 dari 18 dalam kursus Game Unity: Tower Defense di Coddy.
Musuh datang dalam beberapa gelombang: sekelompok musuh dari jenis yang sama, ditempatkan dengan jarak tertentu di sepanjang jalur, lalu ada jeda sebelum kelompok berikutnya. Sebuah gelombang terdiri dari beberapa angka, jadi gelombang adalah class [System.Serializable], dan spawner menyimpan List<Wave> yang ditampilkan Inspector sebagai baris-baris untuk diisi. Tanpa [System.Serializable], Unity tidak dapat menyimpan Wave, Inspector tidak menampilkan list tersebut, dan list itu tetap kosong.
Pengaturan waktunya menggunakan coroutine: perulangan yang membuat musuh, lalu menjalankan new WaitForSeconds(...) untuk menunggu tanpa menghentikan bagian game lainnya. Pertunjukan kembang api mengatur salvo dengan cara yang sama, dengan jeda setelah setiap salvo:
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);
}
}Sekarang, musuh berupa prefab. Field pada prefab hanya dapat menunjuk ke aset dan object di dalam prefab, jadi array waypoints milik musuh baru kosong. Spawner memiliki jalurnya dan meneruskannya ke setiap musuh tepat setelah Instantiate. Instantiate mengembalikan tipe yang diberikan kepadanya, jadi jika field prefab bertipe Enemy, Instantiate mengembalikan Enemy baru yang siap diatur.
Tantangan
MudahGrunt dan Runner sekarang menjadi prefab, bersama Tank dan Boss yang memiliki EnemyData masing-masing. Object Spawner berada di WP0. Kirim musuh dalam gelombang:
- Di
Wave.cs, jadikan Wave sebagai class yang dapat diserialisasi dengan field publikenemy(sebuah Enemy: prefab),count(sebuah int), danspacing(sebuah float, jeda dalam detik antara dua musuh). - Di
WaveSpawner, tambahkan tiga field privat berserialisasi:waves(sebuahList<Wave>),waypoints(sebuah array Transform), dantimeBetweenWaves(sebuah float). - Dari
Start, jalankan coroutine yang memproses gelombang secara berurutan. Untuk setiap gelombang: tunggu selamatimeBetweenWaves, catat nomor gelombangnya mulai dari 1, sebagaiWave 1, lalu munculkan musuh sebanyakcountdi waypoint pertama, berikanwaypointskepada setiap musuh, dan tunggu selamaspacingsetelah setiap musuh. - Setelah gelombang terakhir, catat
All waves sent.
Inspector mengisi delapan gelombang game dan jeda selama 8 detik. Tekan Play dan lihat gelombang pertama datang, lalu tekan Periksa.
Coba sendiri
using UnityEngine;
// Ditambahkan nanti: mengirim musuh menyusuri jalur dalam beberapa gelombang.
public class WaveSpawner : MonoBehaviour
{
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.