Menu
CoddyTech

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.

challenge icon

Tantangan

Mudah

Markas 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 Access enum 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 dalam needs.

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;
    }
}
quiz iconUji dirimu

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

Semua pelajaran di Arsitektur Game di Unity