Page cover

memoNotlar

Çok oyunculu bir oyunda ağ üzerinden veri senkronizasyonu yaparken veya oyun mantığını geliştirirken, aşağıdaki temel ilkeleri göz önünde bulundurmanız önemlidir:


1. Replication Her Şeyi Kapsamak Zorunda Değil

Bir aktörün replicated olması, tüm bileşenlerinin ve işlevlerinin ağ üzerinden senkronize edilmesi gerektiği anlamına gelmez. Performans ve bant genişliği optimizasyonu için yalnızca gerekli bileşenleri veya değişkenleri replicate etmek en iyi yaklaşımdır.

Örnek:

  • Yerel Girdi: Kullanıcının klavye, fare ya da kontrol cihazıyla yaptığı işlemler yalnızca yerel istemci üzerinde işlenir. Bu işlemler için replication gerekli değildir.

  • Durumsal Bilgiler: Oyuncunun yalnızca kendi ekranında görünen UI öğeleri veya geçici durumlar da replication dışında tutulabilir.

Bu yaklaşım, ağ yükünü azaltır ve oyunun genel performansını iyileştirir.


2. Fonksiyonların Çalışma Ortamını Belirlemek

Kodunuzu yazarken, bir fonksiyonun sunucuda mı, istemcide mi yoksa her iki ortamda mı çalışacağını net bir şekilde tanımlamak önemlidir.

  • Sunucu Tarafı (Server Only): Oyun mantığı, güvenlik kontrolleri ve global durum güncellemeleri gibi kritik işlemler genellikle sunucuda gerçekleştirilir. Örnek: Bir oyuncunun envanterine bir eşya eklenmesi.

  • İstemci Tarafı (Client Only): Kullanıcı arayüzü ve görsel efektler gibi işlemler istemci tarafında gerçekleştirilir. Örnek: Bir menü açıldığında animasyon oynatılması.

  • Her Yerde (Everywhere): Hem sunucuda hem de istemcide çalışması gereken fonksiyonlar, veri senkronizasyonu ve global olaylar için kullanılır. Örnek: Bir oyuncunun pozisyonunun tüm istemcilerde güncellenmesi.

Kodda bu ortamları kontrol etmek için şu yöntemler kullanılabilir:


3. Sunucu ve İstemci İletişimi

Sunucu ve istemci arasında bilgi alışverişi yaparken, aşağıdaki temel prensipleri uygulayabilirsiniz:

  • İstemciden Sunucuya: İstemcide başlayan ve sunucuda sonuçlanan işlemler için Server RPC kullanılır. Örneğin, bir oyuncunun bir düğmeye basarak silahı ateşlemesi.

  • Sunucudan İstemciye: Sunucuda başlayan ve istemcide etkiler yaratan işlemler için Multicast RPC veya replicated değişkenler kullanılır.

  • Yerel İşlemler: Yerel kontroller, özellikle bir oyuncunun kendi karakteri üzerinde tam kontrol sağladığı AutonomousProxy durumlarında kullanılır.


4. Optimizasyon ve Yetki Kontrolü

Oyun kodunuzu daha verimli hale getirmek ve ağdaki potansiyel sorunları önlemek için şu kontrolleri dikkate alın:

  • HasAuthority: Bir aktörün sunucu tarafında çalışıp çalışmadığını kontrol eder. Tek oyunculu modda da işlevsellik sağlamasını istiyorsanız bu kontrolü kullanabilirsiniz.

  • !HasAuthority: İstemci tarafında yalnızca uzak bir istemci olarak çalışması gereken işlevleri sınırlar.

  • IsRunningDedicatedServer: Kodun yalnızca sunucu tarafında çalışmasını sağlamak için kullanılır. Özellikle özel sunucular için gereklidir.

  • IsLocallyControlled: Oyuncunun kendi karakteri üzerinde yerel kontrol sahibi olup olmadığını kontrol eder. Kullanıcı girişlerini yönetmek için sıklıkla kullanılır.

Last updated