Menu
CoddyTech

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.

challenge icon

Tantangan

Mudah

Grunt dan Runner sekarang menjadi prefab, bersama Tank dan Boss yang memiliki EnemyData masing-masing. Object Spawner berada di WP0. Kirim musuh dalam gelombang:

  1. Di Wave.cs, jadikan Wave sebagai class yang dapat diserialisasi dengan field publik enemy (sebuah Enemy: prefab), count (sebuah int), dan spacing (sebuah float, jeda dalam detik antara dua musuh).
  2. Di WaveSpawner, tambahkan tiga field privat berserialisasi: waves (sebuah List<Wave>), waypoints (sebuah array Transform), dan timeBetweenWaves (sebuah float).
  3. Dari Start, jalankan coroutine yang memproses gelombang secara berurutan. Untuk setiap gelombang: tunggu selama timeBetweenWaves, catat nomor gelombangnya mulai dari 1, sebagai Wave 1, lalu munculkan musuh sebanyak count di waypoint pertama, berikan waypoints kepada setiap musuh, dan tunggu selama spacing setelah setiap musuh.
  4. 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
{
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Game Unity: Tower Defense