Enum di Inspector
Termasuk bagian Arsitektur Game di Unity dalam perjalanan Unity di Coddy. Pelajaran 17 dari 50.
Field enum muncul di Inspector sebagai dropdown, sehingga praktis untuk menyiapkan object yang menggunakan satu script yang sama. Satu prefab Pickup bisa digunakan untuk koin, hati, dan perisai: setiap salinan di level mendapatkan jenisnya dari dropdown, lalu script menjalankan percabangan berdasarkan jenis tersebut:
public enum PickupKind { Coin, Heart, Shield }
public class Pickup : MonoBehaviour
{
public PickupKind kind;
public int amount = 1;
void OnTriggerEnter(Collider other)
{
if (!other.TryGetComponent(out PlayerStats stats)) return;
switch (kind)
{
case PickupKind.Coin: stats.coins += amount; break;
case PickupKind.Heart: stats.hp += amount; break;
case PickupKind.Shield: stats.shielded = true; break;
}
Destroy(gameObject);
}
}Scene menyimpan setiap pilihan sebagai angka nilai: Coin adalah 0, Heart 1, Shield 2. Menambahkan nilai di akhir aman. Menyisipkan nilai di bagian depan, seperti pada { Gem, Coin, Heart, Shield }, menggeser setiap angka, sehingga jenis setiap pickup di semua scene berubah. Mengganti nama nilai aman karena angkanya tetap sama. Menuliskan angkanya secara eksplisit, Coin = 0, Heart = 1, Shield = 2, memungkinkan kamu mengurutkan ulang namanya nanti tanpa mengubah pilihan yang tersimpan.
Enum [System.Flags] menyimpan beberapa nilai sekaligus. Dropdown-nya memiliki tanda centang untuk setiap nilai, serta opsi Nothing dan Everything. Setiap nilai memerlukan bit tersendiri, jadi angkanya berupa pangkat dua:
[System.Flags]
public enum Element { None = 0, Fire = 1, Ice = 2, Poison = 4 }
public Element immuneTo; // dicentang di Inspector: Fire dan Poison
public void Hit(int damage, Element element)
{
if (immuneTo.HasFlag(element)) return;
hp -= damage;
}| menggabungkan nilai: Element.Fire | Element.Poison adalah 5. HasFlag(x) menghasilkan true saat setiap nilai dalam x ditetapkan, dan ToString() mencantumkan nilai yang ditetapkan, seperti Fire, Poison.
Tantangan
MudahMarkas memiliki tiga pintu: Gudang membutuhkan kartu kunci merah, Lab membutuhkan kartu biru, dan Brankas membutuhkan keduanya. needs pada setiap pintu dan card pada setiap kartu diatur di Inspector menggunakan enum Access, dan Door.cs serta Keycard.cs sudah siap. Tombol panah menggerakkan Player, yang KeyRing-nya menyimpan kartu yang diambil. Selesaikan KeyRing.cs:
- Jadikan
Accessenum yang nilainya bisa digabungkan, sehingga pintu dapat membutuhkan beberapa kartu dan gantungan kunci dapat menyimpan beberapa kartu. Pertahankan keempat namanya: None, Red, Blue, dan Green. Add(Access card)menambahkan kartu ke gantungan kunci, sambil mempertahankan kartu yang sudah ada.Opens(Access needs)mengembalikan true saat gantungan kunci menyimpan semua kartu dalamneeds.
Tekan Play, coba pintunya, ambil kartu-kartunya, lalu tekan Periksa.
Coba sendiri
using UnityEngine;
public enum Access { None, Red, Blue, Green }
public class KeyRing : MonoBehaviour
{
public Access cards;
public void Add(Access card)
{
// tambahkan kartu ke gantungan, tanpa menghapus kartu yang sudah ada
}
public bool Opens(Access needs)
{
// true jika gantungan berisi semua kartu dalam needs
return false;
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Arsitektur Game di Unity
1Komponen, Bukan Hierarki
Komponen KecilSkrip Dasar MusuhKomponen AbstrakKomponen yang Bekerja SamaRingkasan: Turret Modular4Data Terserialisasi
Class yang Dapat DiserialisasiList di InspectorEnum di InspectorRingkasan: Tabel Loot5ScriptableObjects
Aset DataStatistik SenjataPengaturan BersamaGelombang sebagai DataUlasan: database Item8Kode yang Dapat Digunakan Kembali
Extension methodSingleton GenerikHelper GenerikUlasan: FindNearest