# Pawn Ve Character ?

**APawn**, bir oyuncunun veya yapay zekanın kontrol ettiği **AActor** sınıfıdır. Çoğu zaman, bu sınıf bir insan karakterini temsil etse de, **APawn** farklı türlerde varlıklar için de kullanılabilir: örneğin, bir kedi, uçak, gemi, blok vb. **Pawn**, temel olarak oyuncuların kontrol ettiği tüm aktörleri kapsar.

Bir oyuncu yalnızca tek bir **Pawn**'u sahiplenebilir (possess), ancak **unpossess** (sahiplikten çıkma) ve **re-possess** (yeniden sahiplenme) işlemleriyle farklı **Pawn**'lar arasında kolayca geçiş yapabilir. **Pawn**'lar genellikle tüm istemcilere **replicate** edilir, yani oyun dünyasında hareketlerini ve durumlarını tüm istemcilerle senkronize eder.

**ACharacter**, **APawn**'ın alt sınıfıdır ve genellikle oyuncunun karakteri olarak kullanılır. **ACharacter** sınıfı, oyuncunun hareketini kolayca yönetmek için bir **MovementComponent** içerir ve bu hareket bilgisi ağ üzerinde de **replicate** edilir. Bu nedenle, **ACharacter**, özellikle çok oyunculu oyunlarda yaygın olarak tercih edilir.

#### APawn ve ACharacter'ın Çoğunlukla Kullanıldığı Alanlar

1. **Karakter Hareketi ve Replikasyonu**:
   * **ACharacter** sınıfı, **MovementComponent** ile donatılmıştır. Bu bileşen, oyuncunun karakterinin pozisyonunu, dönüşünü, hızını ve diğer hareket bilgilerini ağ üzerinden **replicate** eder. Bu, istemciler arasında karakterin hareketlerinin doğru şekilde görüntülenmesini sağlar.
2. **Multiplayer Oyunlarda Kullanım**:
   * **Pawn**'lar, multiplayer oyunlarda oyuncuların karakterlerini temsil eder. Bu karakterler, tüm istemcilere replikasyon yoluyla gönderilir ve bu sayede tüm oyuncular, diğer oyuncuların hareketlerini ve durumlarını doğru şekilde görebilir. Örneğin, bir oyuncunun **Health** (sağlık) bilgisi replikasyonla tüm istemcilere iletilir ve oyuncunun can durumu her istemcide güncellenir.
3. **Possess ve Unpossess İşlemleri**:
   * Oyuncular bir **Pawn**'ı **possess** ettiğinde, o **Pawn**'ın kontrolleri oyuncuya ait olur. Bu işlem sunucu tarafında gerçekleşir ve istemcilerde de bu işlem yansır. Aynı şekilde, **unpossess** işlemi ile oyuncu, mevcut **Pawn**'ı terk edebilir ve başka bir **Pawn**'ı sahiplenebilir.
4. **Controller ile Etkileşim**:
   * **Pawn**'ın kontrolünü sağlayan **PlayerController** veya **AIController**, karakterin nasıl hareket ettiğini belirler. **Pawn**, bu **Controller**'lar ile etkileşim içinde çalışır. **ReceiveControllerChanged** gibi fonksiyonlar, istemcideki bu değişikliklere tepki verebilir.

<figure><img src="https://499018633-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZiZeirBAvbtaBiMPpunl%2Fuploads%2FdTp75eDGCN6nY5LLfOuA%2Fimage.png?alt=media&#x26;token=85b1517e-f9b7-497d-a56e-ce6ac414a4fc" alt="" width="383"><figcaption></figcaption></figure>

#### Sağlık (Health) Örneği

**Health** (sağlık), multiplayer oyunlarda **Pawn**'ların durumlarını takip etmek için yaygın olarak kullanılan bir bilgidir. Bu bilgiyi, istemcilerde doğru şekilde görüntülemek ve sunucuda yetki sağlamak için replikasyon kullanılır.

**Sağlık Değeri Replikasyonu**

Bir **Pawn** veya **ACharacter** üzerinde sağlık bilgisi genellikle şu adımlarla yönetilir:

* **Health ve MaxHealth** değişkenleri, **replicate** edilerek istemcilerde güncel sağlık bilgisi gösterilir.
* **EventAnyDamage** fonksiyonu, oyuncunun aldığı hasarı işlemek için kullanılır ve bu fonksiyon yalnızca **sunucu** tarafında çalıştırılır. Bu sayede, oyuncunun sağlık durumu sunucuda güncellenir ve istemcilerde doğru şekilde yansır.

<figure><img src="https://499018633-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZiZeirBAvbtaBiMPpunl%2Fuploads%2FhSLFK5gzsa5HoYjZ33ZW%2Fimage.png?alt=media&#x26;token=815daf1a-99ee-481b-ba50-ffd9b2d2968c" alt=""><figcaption></figcaption></figure>

* Sağlık bilgisinin **UserWidget**'te (örneğin, bir sağlık çubuğunda) görüntülenmesi için, **Pawn**'ın **BeginPlay** fonksiyonunda bir referans ayarlanır ve widget'a bağlanır.

**Widget ve Sağlık Çubuğu**

Sağlık çubuğunun doğru bir şekilde gösterilebilmesi için aşağıdaki adımlar izlenebilir:

* **UserWidget** oluşturulur ve içinde bir **ProgressBar** (sağlık çubuğu) eklenir.
* **Pawn** referansı, widget ile ilişkilendirilir.
* **Health** değeri, **ProgressBar**'ın değerine bağlanarak oyuncunun sağlık durumu ekranda gösterilir.

<figure><img src="https://499018633-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZiZeirBAvbtaBiMPpunl%2Fuploads%2Fwq7QUIk8lx7m1o6R3nf5%2Fimage.png?alt=media&#x26;token=f36b0377-a44f-44be-9907-e5bb369e2cdd" alt=""><figcaption></figcaption></figure>

<figure><img src="https://499018633-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZiZeirBAvbtaBiMPpunl%2Fuploads%2FXALTbfi0hsfB95WsGb7K%2Fimage.png?alt=media&#x26;token=26eb7e0e-5772-4f9a-9d49-a4a7e40d00ed" alt=""><figcaption></figcaption></figure>

\
\
**BeginPlay** fonksiyonunda, widget'ın doğru **Pawn** referansı ile ayarlanması sağlanır ve sağlık bilgisi, her istemcide güncellenir.

<figure><img src="https://499018633-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZiZeirBAvbtaBiMPpunl%2Fuploads%2FPc6hGXO72a3DJ11MemsL%2Fimage.png?alt=media&#x26;token=eee42714-3204-4887-b6c1-34ea81f0d2ad" alt=""><figcaption></figcaption></figure>

Sağlık bilgisi replikasyon yoluyla sunucudan istemcilere iletilir. Böylece, tüm oyuncular, diğer oyuncuların sağlık durumlarını ve bu durumu etkileyecek olayları doğru şekilde görebilir.

<figure><img src="https://499018633-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZiZeirBAvbtaBiMPpunl%2Fuploads%2FowefJtutrgp7mlEMCvNC%2Fimage.png?alt=media&#x26;token=c2570873-a5a6-4a63-8d07-662678069265" alt=""><figcaption></figcaption></figure>
