Gelombang sebagai Data
Termasuk bagian Arsitektur Game di Unity dalam perjalanan Unity di Coddy. Pelajaran 27 dari 64.
Gelombang suatu level adalah sebuah list: tiga grunt, lalu dua brute, lalu satu boss. Jika ditulis dalam kode spawner, setiap level memerlukan kodenya sendiri. Jika ditulis sebagai data, list tersebut 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 berada di sampingnya. Pilih asset WaveSet, lalu Inspector menampilkan Gelombang dengan Ukuran dan baris Elemen 0, Elemen 1, masing-masing dengan Musuh, Jumlah, dan Jarak; tombol + menambahkan gelombang. Spawner menelusuri list tersebut dalam sebuah 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. Setelah grunt terakhir, jeda antar kemunculan dan istirahat selama 3 detik berlangsung, lalu brute pertama muncul pada detik ke-4.5. Spawner Level 2 mendapat asset Level2 dengan gelombang yang lebih sulit, sementara skripnya tetap sama.
Tantangan
SedangUbah ritme Dropper menjadi aset lagu.
- Di
DropPattern.cs, tulis classDropdengan atribut[System.Serializable], sertaint lanedanfloat delaypublik. - Di bawahnya, tulis
DropPattern : ScriptableObjectdengan[CreateAssetMenu]sertaGameObject blockPrefab,float laneWidth, danList<Drop> dropspublik. - Di
Dropper, gunakanpublic DropPattern pattern;: untuk setiap drop, tunggu selamadrop.delay, lalu jatuhkan blok yang digeser sejauhdrop.lane * pattern.laneWidthpada sumbu x.
Tekan tombol “Main”: empat blok jatuh. Lalu tekan tombol “Periksa”.
Coba sendiri
using System.Collections.Generic;
using UnityEngine;
// Drop (satu blok: jalurnya dan waktu tunggu sebelumnya) dan DropPattern (asetnya) ditempatkan di sini
Semua pelajaran di Arsitektur Game di Unity
1Komponen, Bukan Hierarki
Komponen KecilSkrip Dasar MusuhKomponen AbstrakKomponen yang Bekerja BersamaRangkuman: Turret ModularRangkuman: Meriam Kembar4Data yang Diserialisasi
Class yang Dapat DiserialisasiList di InspectorEnum di InspectorRangkuman: Tabel LootRangkuman: Acak Loot2Antarmuka di Unity
IDamageableAntarmuka dan TryGetComponentGetComponentsRingkasan: Tombol InteractRingkasan: Terdekat dalam Jangkauan5ScriptableObjects
Aset DataStatistik SenjataPengaturan BersamaSelamatkan AnginGelombang sebagai DataRekap: database ItemBeli dari Toko8Kode yang Dapat Digunakan Kembali
Extension methodSingleton GenerikHelper GenerikUlasan: FindNearestLatihan sendiri: Playground Unity