# UserWidget Nedir ?

**UUserWidget**, Epic Games'in **Unreal Motion Graphics (UMG)** adlı kullanıcı arayüzü (UI) sisteminde kullanılan bir sınıftır. **UUserWidget**, **Slate** adlı bir dilin miras aldığı sınıf olup, Slate, C++ içinde UI oluşturmak için kullanılan bir dil olarak bilinir ve Unreal Engine Editörü için de kullanılır.

Unreal Engine'de **UUserWidget** sınıfı, UI bileşenlerini yönetmek ve görsel öğeleri kullanıcıya göstermek için kullanılan temel yapı taşlarından biridir. **UUserWidget**'ler, görsel ve etkileşimli arayüzlerin oluşturulmasını sağlar ve genellikle oyuncu arayüzleri, menüler, envanterler, sağlık barları, puanlar ve diğer etkileşimli unsurlar için kullanılır.

#### UUserWidget ve UMG

**UMG (Unreal Motion Graphics)**, Unreal Engine için bir kullanıcı arayüzü (UI) geliştirme aracıdır. **UUserWidget** sınıfı, **UMG** aracılığıyla görsel bileşenler oluşturmayı ve yönetmeyi sağlar. UMG ile kullanıcı arayüzü tasarımı, görsel öğeler eklemek ve bu öğeleri oyunla etkileşimli hale getirmek oldukça kolaydır.

* **Slate ve UMG Arasındaki Fark**: **Slate**, Unreal Engine'in temel UI dilidir ve C++ kodunda kullanılır. **UUserWidget** ise bu dilin daha yüksek seviyeli bir sürümü olup, **Blueprint** ve **Editor** ile daha kolay erişilebilir hale getirilmiştir. **UUserWidget** sınıfı, Blueprint üzerinden daha kullanıcı dostu bir şekilde erişilebilirken, **Slate** genellikle daha teknik ve özelleştirilmiş çözümler için kullanılır.

#### UUserWidget Özellikleri ve Kullanımı

1. **Yerel Erişim**:
   * **UUserWidget** yalnızca yerel olarak erişilebilir ve istemci tarafında çalışır. Bu, UI öğelerinin yalnızca oyuncunun kendi oyun oturumunda görüntülendiği anlamına gelir. Bu öğeler **replicate edilmez** ve bu nedenle **replication kodu** içermemelidir.
2. **Gameplay Kodunun Azaltılması**:
   * **UUserWidget**'ler, UI odaklı öğeler olarak tasarlanmıştır ve mümkünse **gameplay kodu** içermemelidir. Ancak bazı oyunlarda, UI öğelerinin oyun mantığıyla etkileşime girmesi gerekebilir (örneğin, bir sağlık barı veya envanter UI'si). Bu durumda, UI bileşenlerine bazı oyun mantığı kodları eklenebilir, ancak bu genellikle önerilmez.
3. **Kullanıcı Etkileşimleri**:
   * **UUserWidget** kullanarak kullanıcı etkileşimlerini yönetebilirsiniz. Bu, buton tıklamaları, menü navigasyonu, sürükle bırak işlemleri gibi etkileşimleri içerir. **UMG** aracılığıyla, UI öğelerine kolayca fonksiyonlar eklenebilir ve oyunla etkileşimli hale getirilebilir.
4. **UI Öğelerinin Oluşturulması ve Gösterilmesi**:
   * **UUserWidget** sınıfı, görsel öğeleri tanımlamak için kullanılır ve bu öğeler **Blueprint**'ler aracılığıyla tasarlanabilir. Ayrıca, bu sınıf UI bileşenleri için görsel düzenlemeler yapmak ve bu öğeleri dinamik olarak ekrana eklemek için kullanılır.
5. **UI Öğelerinin Yönetimi**:
   * **UUserWidget**'ler, oyun sırasında dinamik olarak yaratılabilir, gizlenebilir ve yok edilebilir. Örneğin, bir **Widget Component** ekleyerek oyun içindeki 3D öğelerde UI gösterebilirsiniz.
