Menu
CoddyTech

Gelombang Musuh

Termasuk bagian Arsitektur Game di Unity dalam perjalanan Unity di Coddy. Pelajaran 44 dari 50.

challenge icon

Tantangan

Sedang

Musuh kini datang dalam gelombang, dan gelombang tersebut berupa data. Pertahankan semua yang sudah dibuat di pelajaran sebelumnya. Arena tidak lagi memiliki musuh sendiri: prefab Grunt dan Dasher memuat skripmu, empat titik spawn berada di sudut-sudut arena, dan object Spawner di tengah memiliki skrip WaveSpawner.

  • Di WaveSet.cs, tambahkan class Wave dengan [System.Serializable], yang memiliki public Enemy enemy (prefab), public int count, dan public float spacing. WaveSet adalah ScriptableObject dengan [CreateAssetMenu], public List<Wave> waves, dan public float restBetweenWaves. Asset Arena di scene memuat tiga gelombang (3 grunt dengan jarak 0.5 s, 2 dasher dengan jarak 1 s, 5 grunt dengan jarak 0.4 s) dan waktu istirahat 2 detik.
  • Enemy memiliki public static event Action<Enemy> Died, yang dipicu dengan mengirimkan enemy tepat sebelum dihancurkan.
  • WaveSpawner mendapatkan waveSet dan spawnPoints dari Inspector, serta memiliki public int Wave { get; private set; }, yaitu nomor gelombang yang sedang berlangsung. Dari Start, sebuah coroutine menjalankan gelombang dalam asset secara berurutan. Untuk setiap gelombang: tambahkan 1 ke Wave dan catat nilainya, seperti Wave 1; spawn enemy sebanyak count dengan jarak spacing detik, enemy i (dimulai dari 0) di spawnPoints[i % spawnPoints.Length]; tunggu sampai tidak ada enemy yang masih hidup; lalu istirahat selama restBetweenWaves detik. Setelah gelombang terakhir, set dimulai lagi dari gelombang pertama, dan hitungan Wave terus bertambah: 4, 5, dan seterusnya.
  • Hitung jumlah enemy yang masih hidup menggunakan event Died: berlangganan di OnEnable dan berhenti berlangganan di OnDisable. Spawner hanya membaca asset: di Editor, perubahan pada asset saat game berjalan akan tetap tersimpan di asset setelah Play.

Tekan Jalankan dan bertahanlah selama beberapa gelombang, lalu tekan Periksa.

Coba sendiri

using UnityEngine;

public class WaveSpawner : MonoBehaviour
{
    // Pelajaran berikutnya akan melengkapi bagian ini: mengirim gelombang ke arena.
}

Semua pelajaran di Arsitektur Game di Unity