Menu
CoddyTech

Gelombang sebagai Data

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

Gelombang suatu level adalah sebuah list: tiga grunt, lalu dua brute, lalu satu bos. Jika ditulis dalam kode spawner, setiap level memerlukan kodenya sendiri. Jika ditulis sebagai data, list itu dimasukkan ke dalam asset, satu asset untuk setiap level, dan satu skrip spawner membaca asset yang diberikan kepadanya. Setiap entri adalah class [System.Serializable], sehingga Inspector asset menampilkan list tersebut:

using System.Collections.Generic;
using UnityEngine;

[System.Serializable]
public class Wave
{
    public GameObject enemy;
    public int count = 1;
    public float spacing = 1f;
}

[CreateAssetMenu(menuName = "Game/Wave Set")]
public class WaveSet : ScriptableObject
{
    public List<Wave> waves;
    public float restBetweenWaves = 3f;
}

Semua ini berada dalam satu file, WaveSet.cs: ScriptableObject memerlukan file dengan namanya sendiri, dan class Wave biasa bisa ditempatkan di sampingnya. Pilih asset WaveSet, lalu Inspector menampilkan Waves dengan Size dan baris Element 0, Element 1, masing-masing dengan Enemy, Count, dan Spacing. Tombol + menambahkan gelombang. Spawner menelusuri list dengan coroutine:

public class WaveSpawner : MonoBehaviour
{
    public WaveSet waveSet;

    void Start()
    {
        StartCoroutine(SendWaves());
    }

    IEnumerator SendWaves()
    {
        foreach (Wave wave in waveSet.waves)
        {
            for (int i = 0; i < wave.count; i++)
            {
                Instantiate(wave.enemy, transform.position, Quaternion.identity);
                yield return new WaitForSeconds(wave.spacing);
            }
            yield return new WaitForSeconds(waveSet.restBetweenWaves);
        }
        Debug.Log("Last wave sent");
    }
}

Dengan Level1 yang berisi 3 grunt dengan jarak 0.5 detik, lalu 2 brute, grunt muncul pada detik ke-0, 0.5, dan 1. Jeda setelah grunt terakhir dan waktu istirahat 3 detik pun berlalu, lalu brute pertama muncul pada detik ke-4.5. Spawner untuk Level 2 mendapatkan asset Level2 dengan gelombang yang lebih sulit, sementara skripnya tetap sama.

challenge icon

Tantangan

Sedang

Hujan Blok: blok-blok jatuh dari langit mengikuti irama, dan kamu menghindarinya dengan tombol panah. Dropper menjatuhkan satu blok ke setiap jalur dalam array lanes-nya, selalu dengan jeda 1 detik. Ubah iramanya menjadi data agar setiap lagu bisa menjadi asset:

  • Di DropPattern.cs, tulis class Drop dengan atribut [System.Serializable] dan field publik lane (int: -1 kiri, 0 tengah, 1 kanan) serta delay (float: jumlah detik untuk menunggu sebelum blok ini dijatuhkan). Di bawahnya, tulis DropPattern, sebuah ScriptableObject dengan [CreateAssetMenu] dan field publik blockPrefab (sebuah GameObject), laneWidth (float), dan drops (sebuah List<Drop>).
  • Di Dropper, ganti kedua field dengan field publik pattern bertipe DropPattern. Untuk setiap drop secara berurutan, tunggu selama delay-nya, lalu jatuhkan blok dari pattern pada posisi Dropper yang digeser sejauh lane dikali laneWidth sepanjang sumbu x. Setelah drop terakhir, catat Pattern done.

Proyek ini memiliki asset Song1: lebar jalur 2 dan empat drop, dan Inspector menempatkannya di field pattern milik Dropper. Tekan Play dan hindari blok-bloknya, lalu tekan Periksa.

Coba sendiri

using System.Collections.Generic;
using UnityEngine;

// Drop (satu blok: jalurnya dan jeda sebelum blok itu) serta DropPattern (asetnya) diletakkan di sini
quiz iconUji dirimu

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

Semua pelajaran di Arsitektur Game di Unity