C# delegate, event ve UnityEvent arasındaki farklar nelerdir?

Cevap

Delegate, bir metoda referans tutan tiptir. event, delegate üzerine kurulu ve dışarıdan sadece += / -= yapılmasına izin veren bir erişim kısıtlamasıdır. UnityEvent ise Inspector'dan bağlanabilen, serileştirilebilir bir event sistemidir.

public class Health : MonoBehaviour
{
    // C# event: kod ile abone olunur
    public event Action<int> OnDamaged;

    // UnityEvent: Inspector'dan da bağlanabilir
    public UnityEvent onDied;

    int hp = 100;
    public void TakeDamage(int amount)
    {
        hp -= amount;
        OnDamaged?.Invoke(hp);
        if (hp <= 0) onDied.Invoke();
    }
}

// Abone
void OnEnable()  { health.OnDamaged += UpdateHealthBar; }
void OnDisable() { health.OnDamaged -= UpdateHealthBar; }
ÖzellikC# eventUnityEvent
BağlamaSadece kodKod ve Inspector
PerformansDaha hızlıDaha yavaş, reflection/serileştirme maliyeti
Kimin tetiklediğiSadece sahip sınıfPublic ise herkes
Tasarımcı erişimiYokVar

Neden event kullanılır

  • Gevşek bağlılık (decoupling): Health, UI'ı veya ses sistemini tanımak zorunda kalmaz; sadece "hasar aldım" der.
  • Observer pattern'in dil seviyesindeki karşılığıdır.

Yaygın hata

Aboneliği bırakmamak memory leak ve yok edilmiş nesne üzerinde MissingReferenceException hatalarına yol açar. Statik event'lerde bu risk daha büyüktür, çünkü statik referans nesnenin GC tarafından toplanmasını engeller.

  1. Unity'de Update, FixedUpdate ve LateUpdate arasındaki fark nedir?KolayUnity & C#Game Dev
  2. GetComponent çağrılarını neden önbelleğe almalısınız?KolayUnity & C#Game Dev
  3. Rigidbody, physics layer'lar ve raycast nasıl çalışır? FixedUpdate neden önemlidir?OrtaUnity & C#Game Dev
  4. Unity'de garbage collection neden frame düşüşüne yol açar? Update içinde allocation'dan nasıl kaçınırsınız?ZorUnity & C#Game Dev
  5. C#'ta struct ile class arasındaki fark nedir? Value type ve reference type oyunda neden önemlidir?OrtaUnity & C#Game Dev
  6. Prefab nedir? Prefab variant ve nested prefab ne işe yarar?KolayUnity & C#Game Dev

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle