# Ownership Nedir ?

Unreal Engine’de **sahiplik (ownership)**, bir aktörün **hangi oyuncu veya aktör tarafından kontrol edildiğini** ve **replikasyon sürecinin nasıl yönetileceğini** belirleyen kritik bir sistemdir.

* **Her aktöre, bir aktör (Owner) atanabilir.**
* **Bu ownership ilişkisi, oyuncuların oyun dünyasında nasıl etkileşime girdiğini ve aktörlerin durumlarının nasıl senkronize edildiğini yönetir.**

**Ownership** kavramı, **replikasyon, RPC çağrıları ve oyuncu kontrolleri** açısından büyük önem taşır. İşte bu sistemin temel noktaları:

* **Ownership** **Atama**: Genellikle bir aktör doğduğunda (Spawn), o aktöre bir sahip atanır. Ancak, oyun sırasında da sahiplik değiştirilebilir. Bunu yapmak için **SetOwner** fonksiyonu kullanılır ve belirli bir aktöre yeni bir sahibi atanabilir. Bu sahiplik atama işlemi, aktörün replikasyonu ve kontrolünü yöneten önemli bir rol oynar.

{% tabs %}
{% tab title="Spawn" %}

<figure><img src="https://499018633-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZiZeirBAvbtaBiMPpunl%2Fuploads%2F23RlLuyV9L7FKEXwb5ZL%2Fimage.png?alt=media&#x26;token=c6c27efe-aad2-4a55-a085-743e08e33f8c" alt="" width="563"><figcaption></figcaption></figure>
{% endtab %}

{% tab title="Runtime" %}

<figure><img src="https://499018633-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZiZeirBAvbtaBiMPpunl%2Fuploads%2FNyZwCs6aBqaYNK2Nup1E%2Fimage.png?alt=media&#x26;token=1f86b6da-c020-4e63-b03e-cc6b984405e7" alt="" width="563"><figcaption></figcaption></figure>
{% endtab %}
{% endtabs %}

* #### **PlayerController ve Sahiplik (Ownership)**

  **PlayerController**, çok oyunculu oyunlarda **sahiplik ilişkilerini** yöneten önemli bir bileşendir. Her **NetConnection**, bir oyuncuyu temsil eder ve oyuncu **oyuna tamamen giriş yaptığında**, kendisine atanmış bir **PlayerController aktörü** ile ilişkilendirilir.
* Sunucu perspektifinden bakıldığında:

  * **Bir bağlantı (NetConnection), ilgili PlayerController'ın sahibidir.**
  * **PlayerController’a bağlı olan tüm aktörler de dolaylı olarak aynı bağlantıya aittir.**

  Bu ownership sistemi, **oyuncuların yalnızca kendilerine ait aktörler üzerinde işlem yapabilmesini** ve **kontrollü veri paylaşımı sağlanmasını** garanti eder.

<figure><img src="https://499018633-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZiZeirBAvbtaBiMPpunl%2Fuploads%2FsVzm3vaGnwTuFIBzTnY9%2Fimage.png?alt=media&#x26;token=c8c30677-5c34-48ac-b892-38c24fe60d51" alt="" width="563"><figcaption></figcaption></figure>

<figure><img src="https://499018633-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZiZeirBAvbtaBiMPpunl%2Fuploads%2FK7TTDweWM1fzpDlTTQG8%2Fimage.png?alt=media&#x26;token=ba94aa56-76cc-43a4-98c2-4d77e3836530" alt="" width="563"><figcaption></figcaption></figure>

* #### **Pawn ve Owner İlişkisi**

  **PlayerController**, otomatik olarak kontrol ettiği **Pawn’un sahibi** olur. Bu ownership ilişkisi, **oyuncunun kontrol ettiği aktörler arasında hiyerarşik bir bağ** oluşturur.

  * **Her PlayerController, bir Pawn’u kontrol eder.**
  * **Pawn’a bağlı aktörler** (örneğin, bir silah veya ekipman aktörü), **doğrudan Pawn’un sahibi olan PlayerController’a ait olur.**

  Sunucu, **bir aktörün ownership** **referansını** takip ederek, bu aktörün **hangi istemciye ait olduğunu** belirler. Bu **ownership** yapısı,

  * **Aktörlerin doğru istemciyle ilişkilendirilmesini**,
  * **Replikasyonun tutarlı ve hatasız şekilde çalışmasını** sağlar.

  Bu sistem sayesinde, **her oyuncunun yalnızca kendi sahip olduğu nesneler üzerinde işlem yapması garanti edilir.**

<figure><img src="https://499018633-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZiZeirBAvbtaBiMPpunl%2Fuploads%2FQd2Qmz8rF7YD7zL6tifZ%2Fimage.png?alt=media&#x26;token=d86dd86c-5fd3-46b4-93e5-077f6cf7efab" alt="" width="563"><figcaption></figcaption></figure>

* **Ownership Zinciri**:
* **Sahiplik (Ownership), aktörler arasında bir hiyerarşik yapı oluşturur.** Bir aktör, başka bir aktörün sahibi olabilir ve bu **ownership zinciri**, özellikle **replikasyon** ve **RPC’lerin doğru istemciye yönlendirilmesi** açısından büyük önem taşır.
  * **Sunucu, bir aktörün sahiplik zincirini takip ederek, hangi oyuncuya veya bağlantıya ait olduğunu belirleyebilir.**
* **Örnek:**
  * **Bir silah (Weapon) aktörü**, onu kullanan **Pawn’a bağlıdır**.
  * **Pawn’un sahibi ise ilgili PlayerController’dır**.
  * **Sunucu, Weapon aktörünün sahiplik zincirini takip ederek, o silahın hangi oyuncuya ait olduğunu belirleyebilir.**

&#x20;

<figure><img src="https://499018633-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZiZeirBAvbtaBiMPpunl%2Fuploads%2F2NAWCHsDPl0OnUKE0yXO%2Fimage.png?alt=media&#x26;token=40159754-465e-44a8-af0a-a8ca7373af61" alt="" width="563"><figcaption></figcaption></figure>

#### **Ownership ve Yetki (Authority) Arasındaki Fark:**

Unreal Engine'de **ownership (sahiplik)**, bir aktörün **hangi oyuncuya veya aktöre ait olduğunu** belirlerken, **authority (yetki)**, aktörün **hangi makine (sunucu veya istemci) tarafından yönetildiğini** belirler.

* **Bir aktörün sahibi bir istemci olabilir, ancak yetkili olan her zaman sunucudur.**
* **Örneğin:** Bir istemci, kendi sahip olduğu bir aktör için **Client → Server RPC** çağırabilir. Ancak, **yetkisi olmadığı için aktörü doğrudan değiştiremez**.

#### **Ownership ve RPC Yetkilendirmesi:**

* **İstemciler yalnızca sahip oldukları aktörler için `Server RPC` çağırabilirler.**
* Eğer **istemci kendisine ait olmayan bir aktörde RPC çağırmaya çalışırsa, istek sunucu tarafından yok sayılır.**
* **Bu yapı, istemcilerin yalnızca kendi sahip oldukları nesneler üzerinde işlem yapmasını garanti eder** ve **hatalı veya kötü amaçlı veri değişikliklerini engeller**.

#### **Ownership ve Replikasyon İlişkisi:**

**Ownership**, yalnızca aktör sahibine özel veri gönderilmesini ve **bu verilerin replikasyon ile yalnızca ilgili istemciye iletilmesini** sağlar. **Bir istemcinin sahip olduğu aktörde güncelleme işlemi**, genellikle **Server → Owning Client RPC** yöntemiyle gerçekleştirilir.

**Örnek Senaryo: Oyuncu Sağlık Değerinin UI'de Güncellenmesi**

Bir oyuncunun **sağlık durumu değiştiğinde**, bu güncellemenin **yalnızca o oyuncunun UI’sinde** gösterilmesi gerekir. Bu durumda:

* **Sunucu, oyuncunun yeni sağlık değerini hesaplar.**
* **Sadece o oyuncunun istemcisine bir RPC göndererek UI’yi güncellemesini sağlar.**
