Menu
CoddyTech

UnityEvent Alanları

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

Bir düğmenin Tıklanınca () olayı bir UnityEvent alanıdır ve kendi betiklerinizde de böyle bir alan olabilir. Genel erişimli bir UnityEvent alanı, Inspector'da aynı türde bir liste olarak görünür ve betik, bu alana neyin bağlandığını bilmeden Invoke() ile olayı tetikler. Bu geri sayım saniyede bir ilerler:

using UnityEngine;
using UnityEngine.Events;

public class Countdown : MonoBehaviour
{
    public int seconds = 3;
    public UnityEvent<int> onTick;
    public UnityEvent onFinished;

    void Start()
    {
        InvokeRepeating("Tick", 1f, 1f);
    }

    void Tick()
    {
        seconds--;
        onTick.Invoke(seconds);
        if (seconds == 0)
        {
            CancelInvoke("Tick");
            onFinished.Invoke();
        }
    }
}

Inspector'da Tamamlandığında (), bir düğmeninki gibi satırlar içerir: bir satır roketi fırlatır, diğeri kapıyı açar. Başka bir seviye, farklı satırlarla aynı Countdown'ı yeniden kullanır ve kimse yeni bir betik yazmaz. UnityEvent<int> bir değer iletir. Açılır menüsünde int alan bir yöntem Dinamik int altında listelenir ve bu satır, burada kalan saniye sayısı olan Invoke'a verilen değeri alır. Aynı yöntem Statik Parametreler altında kullanıldığında bunun yerine satıra yazılan sayıyı alır; parametre almayan yöntemler de bağlanabilir.

Unity, betiği yüklediğinde bir UnityEvent alanı oluşturur; bu nedenle onTick hiçbir zaman null olmaz ve ?. gerekmez. Ayrıca kod, onTick.AddListener(ShowSeconds) ile dinleyiciler ekleyebilir. Tepkinin nesneden nesneye farklılık gösterdiği ve Inspector'da sizin ya da betiği hiç açmayan bir tasarımcının ayarladığı durumlarda UnityEvent seçin. Kod dinlediğinde C# olayı seçin: derleyici yöntem adlarını denetler; böylece bir yeniden adlandırma, sessizce bir <Missing> satırı bırakmak yerine derlemenin başarısız olmasına neden olur. Ayrıca bir C# olayı Inspector'da hiçbir zaman görünmez.

challenge icon

Görev

Kolay

FinishLine öğesine, sahnedeki satırların bağlandığı olayları ekle.

  1. using UnityEngine.Events;, public UnityEvent<int> onLap;, public UnityEvent onRaceOver; ve tamamlanan tur sayısı için bir private int ekle.
  2. OnTriggerEnter içinde, other etiketi Player olduğunda turu say ve tamamlanan tur sayısını onLap.Invoke ile ilet.
  3. laps sayısına ulaşıldığında onRaceOver.Invoke() çağır; bundan sonra bitiş çizgisini geçmenin bir etkisi olmasın.

“Oyna” düğmesine bas ve üç tur sür. Ardından “Kontrol et” düğmesine bas.

Kendin dene

using UnityEngine;

public class FinishLine : MonoBehaviour
{
    public int laps = 3;

    void OnTriggerEnter(Collider other)
    {
        // araba çizgiyi geçti: bir tur daha tamamlandı
    }
}

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

Kendi başına pratik yap: Unity playground