Menu
CoddyTech

Inspector'da Enum'lar

Coddy'nin Unity Journey'sinin Unity'de Oyun Mimarisi bölümünün bir parçası. Ders 17 / 50.

Bir enum alanı Inspector'da açılır menü olarak görünür; bu da aynı scripti paylaşan nesneleri yapılandırmak için kullanışlı bir yol sunar. Tek bir Pickup prefab'ı coin, heart ve shield'lar için kullanılır: seviyedeki her kopya türünü açılır menüden alır ve script bu değere göre seçim yapar:

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);
    }
}

Sahne, her seçimi değerin numarası olarak kaydeder: Coin 0, Heart 1, Shield 2'dir. Sona bir değer eklemek güvenlidir. Baştan bir değer eklemekse, { Gem, Coin, Heart, Shield } örneğinde olduğu gibi, tüm numaraları kaydırır ve her sahnedeki her pickup'ın türü değişir. Bir değeri yeniden adlandırmak güvenlidir, çünkü numarası aynı kalır. Numaraları açıkça yazmak, Coin = 0, Heart = 1, Shield = 2, kaydedilmiş seçimleri değiştirmeden adları daha sonra yeniden sıralamanı sağlar.

Bir [System.Flags] enum'u aynı anda birkaç değer tutar. Açılır menüsünde her değer için bir onay kutusu ile birlikte Hiçbiri ve Tümü seçenekleri bulunur. Her değerin kendine ait bir bite ihtiyacı vardır; bu nedenle numaralar ikinin kuvvetleridir:

[System.Flags]
public enum Element { None = 0, Fire = 1, Ice = 2, Poison = 4 }

public Element immuneTo;   // Inspector'da işaretli: Fire ve Poison

public void Hit(int damage, Element element)
{
    if (immuneTo.HasFlag(element)) return;
    hp -= damage;
}

| değerleri birleştirir: Element.Fire | Element.Poison değeri 5'tir. HasFlag(x), x içindeki tüm değerler ayarlanmışsa true döndürür ve ToString() ayarlanmış değerleri Fire, Poison şeklinde listeler.

challenge icon

Görev

Kolay

Üssün üç kapısı var: Depo için kırmızı anahtar kartı, Laboratuvar için mavi anahtar kartı, Kasaya girmek içinse ikisi de gerekiyor. Her kapının needs değeri ve her kartın card değeri, Inspector'da Access enum'ı kullanılarak ayarlanır; Door.cs ve Keycard.cs hazır. Ok tuşları, aldığı kartları KeyRing'inde tutan Player'ı hareket ettirir. KeyRing.cs dosyasını tamamla:

  • Access'i, değerleri birleştirilebilen bir enum yap; böylece bir kapı birden fazla kart gerektirebilir ve anahtarlıkta birden fazla kart bulunabilir. Dört adını koru: None, Red, Blue ve Green.
  • Add(Access card), zaten anahtarlıkta bulunan kartları koruyarak bir kartı anahtarlığa ekler.
  • Opens(Access needs), anahtarlık needs içindeki tüm kartları tutuyorsa true döndürür.

Play'e bas, kapıları dene, kartları al, ardından Check'e bas.

Kendin dene

using UnityEngine;

public enum Access { None, Red, Blue, Green }

public class KeyRing : MonoBehaviour
{
    public Access cards;

    public void Add(Access card)
    {
        // zaten halkada bulunan kartları koruyarak kartı halkaya ekle
    }

    public bool Opens(Access needs)
    {
        // halka, needs içindeki tüm kartları içeriyorsa true
        return false;
    }
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Unity'de Oyun Mimarisi bölümündeki tüm dersler