Unity Üzerinde Çok Oyunculu Senkronizasyon Sistemi Nasıl Kurulur?

Unity Üzerinde Çok Oyunculu Senkronizasyon Sistemi Nasıl Kurulur?
Unity Üzerinde Çok Oyunculu Senkronizasyon Sistemi Nasıl Kurulur?

Unity Üzerinde Çok Oyunculu Senkronizasyon Sistemi Nasıl Kurulur?

Unity üzerinde çok oyunculu senkronizasyon sistemi kurmak, modern oyun geliştirme süreçlerinin en karmaşık ancak en ödüllendirici aşamalarından biridir. 2026 yılı itibarıyla, oyuncuların düşük gecikme süresi (latency) ve yüksek tutarlılık beklentisi, geliştiricileri ağ mimarisi konusunda daha titiz olmaya zorlamaktadır. Bir oyunun sunucu ve istemciler arasındaki veri akışını doğru yönetememesi, "rubber banding" (karakterin geriye ışınlanması) gibi oyun deneyimini doğrudan baltalayan sorunlara yol açar.

Bu rehberde, Unity ekosisteminde ölçeklenebilir ve güvenilir bir çok oyunculu altyapının nasıl inşa edileceğini, temel ağ kavramlarından başlayarak adım adım ele alacağız. Doğru araçları seçmek, veri paketlerini optimize etmek ve senkronizasyon yöntemlerini doğru uygulamak, projenizin teknik başarısının temelini oluşturacaktır. Teknik bir altyapı kurarken, oyununuzun türüne (FPS, RPG, RTS) göre özelleştirilmiş bir ağ stratejisi belirlemeniz gerektiğini unutmamalısınız.

Unity Ağ Mimarisi ve Senkronizasyon Temelleri

Unity üzerinde çok oyunculu senkronizasyon sistemi kurarken ilk yapmanız gereken, oyununuzun ihtiyaç duyduğu ağ mimarisini belirlemektir. Senkronizasyon, temelde sunucu ile istemciler arasındaki durum güncellemelerinin tutarlı bir şekilde paylaşılması sürecidir.

İstemci-Sunucu (Client-Server) Modeli Nedir?

Çoğu modern çok oyunculu oyunda yetki, sunucudadır. İstemci, oyuncunun girdilerini sunucuya gönderir; sunucu bu girdileri işler ve sonucu tüm istemcilere geri dağıtır. Bu model, hile yapılmasını zorlaştırır ve oyun dünyasının tutarlılığını korur. Unity'nin sunduğu Netcode for GameObjects veya daha gelişmiş çözümler, bu mimariyi yönetmek için gerekli olan "NetworkTransform" ve "NetworkVariable" gibi araçları sağlar.

Gecikme (Latency) ve Jitter Yönetimi

Ağ üzerinden gönderilen her veri paketi bir süreye tabidir. Gecikme süresi arttıkça oyuncunun gördüğü dünya ile sunucudaki dünya arasındaki fark açılır. Bu farkı kapatmak için "Client-Side Prediction" (İstemci Tarafı Tahmini) ve "Server Reconciliation" (Sunucu Uzlaştırması) tekniklerini kullanmalısınız. Bu teknikler, oyuncunun hareketlerini yerel olarak anında simüle ederken, sunucudan gelen düzeltmelerle durumu sürekli güncel tutar.

Unity Netcode Kullanarak Proje Kurulumu

Unity üzerinde çok oyunculu bir yapı kurmak için güncel standart, Unity'nin resmi "Netcode for GameObjects" (NGO) paketidir. Bu paket, yüksek performanslı ve modüler bir yapı sunar.

Adım Adım Kurulum Süreci

  1. Unity Hub üzerinden projenizi açın ve "Package Manager" kısmına gidin.
  2. "Netcode for GameObjects" paketini aratın ve projenize dahil edin.
  3. Proje hiyerarşisinde "NetworkManager" adında boş bir GameObject oluşturun.
  4. NetworkManager bileşenini ekleyin ve bir "Transport" (örneğin Unity Transport) atayın.
  5. "Network Prefab" listesine, senkronize edilecek tüm karakter ve nesneleri ekleyin.
Kritik Uyarı: Ağ üzerinde senkronize edilecek her nesnenin "NetworkObject" bileşenine sahip olması zorunludur. Aksi takdirde, sunucu bu nesneyi tanıyamaz ve istemciler arasında veri akışı sağlanamaz.

Veri Senkronizasyonu ve NetworkVariable Kullanımı

Oyun içerisindeki değişkenlerin (can puanı, skor, oyuncu ismi) tüm istemcilerde aynı anda güncellenmesi gerekir. Unity, bu işlem için "NetworkVariable" yapısını kullanır.

NetworkVariable ile Değişken Senkronizasyonu

NetworkVariable, değeri değiştiğinde otomatik olarak ağ üzerinden tüm istemcilere güncel veriyi gönderir. Örneğin, bir oyuncunun can puanını senkronize etmek için şu adımları izleyin:

  1. Script içerisinde NetworkVariable playerHealth = new NetworkVariable(100); tanımlayın.
  2. Bu değişkenin erişim izinlerini (Read/Write) belirleyin.
  3. Değişken değeri sunucuda değiştiğinde, tüm istemciler bu değişikliği otomatik olarak alır.

RPC (Remote Procedure Call) İle Olay Yönetimi

Sadece değişkenleri değil, belirli olayları (örneğin bir silahın ateşlenmesi veya bir kapının açılması) tetiklemek için RPC kullanılır. RPC, sunucudan istemciye veya istemciden sunucuya doğrudan komut gönderilmesini sağlar.

Senkronizasyon Stratejileri Karşılaştırması

Hangi senkronizasyon yönteminin projenize uygun olduğunu anlamak için aşağıdaki tabloyu inceleyebilirsiniz.

Yöntem Kullanım Alanı Avantajı Dezavantajı
NetworkVariable Skor, Can, Durum Otomatik güncellenir Yüksek veri trafiği
Server RPC Girdi gönderme Güvenli, hile korumalı Gecikmeye duyarlı
Client RPC Efektler, Ses Hızlı tepki Sunucu yetkisi gerektirmez

Ağ Optimizasyonu ve Performans İpuçları

Çok oyunculu senkronizasyon sistemi kurarken en büyük hata, her saniye her veriyi göndermeye çalışmaktır. Bu, ağ bant genişliğini tüketir ve sunucu maliyetlerini artırır.

Veri Gönderimini Optimize Etme

  • Delta Compression: Sadece değişen verileri gönderin. Tüm nesne durumunu sürekli göndermek yerine, sadece farklılıkları iletin.
  • Interest Management: Oyuncunun sadece yakınındaki nesneleri senkronize edin. Uzaktaki oyuncuların veya nesnelerin verisini göndermek gereksizdir.
  • Update Sıklığı: Hareket verilerini 60 FPS yerine, ağ koşullarına göre 20-30 Hz aralığında güncelleyin.

Sıkça Sorulan Sorular

Unity'de çok oyunculu oyunlar için sunucu maliyeti nedir?

Sunucu maliyeti, oyuncu sayısına ve oyunun karmaşıklığına göre değişir. Relay servisleri küçük çaplı oyunlar için ücretsiz veya uygun maliyetli olabilirken, dedicated (adanmış) sunucular daha yüksek ölçekli oyunlar için gereklidir.

Yerel ağ (LAN) ile internet üzerinden oyun farkı nedir?

LAN üzerinde gecikme neredeyse sıfırdır. İnternet üzerinden oyunlarda ise paket kaybı ve değişken gecikme (jitter) gibi sorunlarla başa çıkmak için gelişmiş tahmin algoritmaları kullanmanız gerekir.

Hileleri engellemek için ne yapmalıyım?

Asla istemciye güvenmeyin. Tüm kritik hesaplamaları (hasar, hız, envanter yönetimi) sunucu tarafında yapın ve istemciden gelen verileri her zaman doğrulayın.

Mobil cihazlarda senkronizasyon zor mu?

Mobil cihazlarda bağlantı kopmaları ve veri kısıtlamaları daha yaygındır. Bu nedenle "reconnection" (tekrar bağlanma) mekanizmalarını çok iyi kurgulamanız gerekir.

Unity'nin hangi sürümünü kullanmalıyım?

Her zaman Unity'nin LTS (Long Term Support) sürümlerini tercih edin. 2026 yılı itibarıyla en güncel LTS sürümü, ağ kütüphaneleri için en stabil desteği sunacaktır.

Sonuç

Unity üzerinde çok oyunculu senkronizasyon sistemi kurmak, sabır ve sürekli test gerektiren bir süreçtir. Başarı, sadece doğru araçları seçmekle değil, ağ trafiğini nasıl optimize ettiğinizle ve sunucu-istemci arasındaki yetki hiyerarşisini ne kadar iyi kurduğunuzla ilgilidir. Başlangıçta basit bir "Player Movement" senkronizasyonu ile başlayıp, sistemi kademeli olarak karmaşıklaştırmak en sağlıklı yöntemdir. Unutmayın ki, teknik bir sorunla karşılaştığınızda Unity'nin resmi dokümantasyonları ve geliştirici toplulukları, karşılaştığınız spesifik ağ hatalarını gidermek için en güvenilir kaynaklardır.

Unity Üzerinde Çok Oyunculu Senkronizasyon Sistemi Nasıl Kurulur?

Oyun geliştirme dünyasında çok oyunculu (multiplayer) deneyimler, tek oyunculu projelere kıyasla çok daha karmaşık bir mimari gerektirir. Bir oyuncunun hareketinin veya bir nesnenin durumunun diğer tüm oyuncular tarafından aynı anda ve tutarlı bir şekilde görülmesi, "senkronizasyon" olarak adlandırılan temel bir ağ ilkesine dayanır. Bu rehberde, Unity'nin modern ağ çözümlerini kullanarak nasıl sağlam bir altyapı kuracağınızı detaylandıracağız.

Unity Ağ Mimarisi ve Senkronizasyon Temelleri

Unity'de ağ mimarisi, verinin istemciler ve sunucu arasında nasıl aktarılacağını belirleyen kurallar bütünüdür. Senkronizasyon, ağdaki gecikme (latency) süresine rağmen oyun dünyasının tüm katılımcılar için "aynı" görünmesini sağlama sanatıdır.

İstemci-Sunucu (Client-Server) Modeli Nedir?

Modern oyunlarda en yaygın kullanılan model, yetkili sunucu (Authoritative Server) modelidir. Bu modelde sunucu, oyun dünyasının "gerçeğini" tutan tek otoritedir. İstemciler sadece giriş yapar, sunucu ise bu girdileri işleyerek sonucu tüm istemcilere geri gönderir.

Gecikme (Latency) ve Jitter Yönetimi

Gecikme, verinin bir noktadan diğerine gitme süresidir. Jitter ise bu gecikmenin sürekli dalgalanmasıdır. Senkronizasyon sisteminizi kurarken, "Client-Side Prediction" (İstemci Tarafı Tahmini) kullanarak oyuncunun hareketini yerel olarak anında işleyip, sunucudan gelen düzeltmelerle durumu eşitlemeniz gerekir.

Unity Netcode Kullanarak Proje Kurulumu

Unity'nin güncel standartı olan Netcode for GameObjects (NGO), yüksek performanslı bir ağ kütüphanesidir. Kurulum için Paket Yöneticisi (Package Manager) üzerinden "Netcode for GameObjects" paketini projenize dahil etmeniz yeterlidir.

Adım Adım Kurulum Süreci

  1. NetworkManager Kurulumu: Sahnenize boş bir GameObject oluşturun ve "NetworkManager" bileşenini ekleyin.
  2. Transport Layer Seçimi: Unity Transport (UTP) varsayılan olarak en iyi performansı sunar.
  3. Player Prefab Hazırlığı: Oyuncu karakterinize "NetworkObject" bileşenini ekleyin ve bunu NetworkManager'ın "Network Prefabs" listesine sürükleyin.

Veri Senkronizasyonu ve NetworkVariable Kullanımı

Oyun içerisindeki değişkenlerin (can puanı, skor, isim) tüm istemcilerde aynı kalması için NetworkVariable sınıfı kullanılır. Bu sınıf, değişken değerinin sunucudan istemcilere otomatik olarak senkronize edilmesini sağlar.

NetworkVariable ile Değişken Senkronizasyonu

Örnek olarak bir oyuncunun canını yönetmek için:

private NetworkVariable health = new NetworkVariable(100);

Bu değişken, sunucuda değiştiği anda tüm istemcilerde güncellenir. Ancak, değişkeni değiştirmek için sadece sunucu yetkisine sahip kod bloklarını kullanmalısınız.

RPC (Remote Procedure Call) İle Olay Yönetimi

RPC, sunucudan istemciye veya istemciden sunucuya doğrudan bir fonksiyon tetikleme yöntemidir. Örneğin, bir oyuncu ateş ettiğinde "Fire" fonksiyonunu RPC ile sunucuya gönderirsiniz, sunucu bu atışı doğrular ve diğer oyunculara "PlaySound" RPC'sini gönderir.

Senkronizasyon Stratejileri Karşılaştırması

Strateji Avantajı Dezavantajı
NetworkVariable Sürekli güncellenen veriler için ideal. Ağ trafiğini artırabilir.
RPC Tek seferlik olaylar için mükemmel. Geç katılan oyunculara veriyi iletmez.

Ağ Optimizasyonu ve Performans İpuçları

Ağ trafiğini azaltmak için "Network Transform" bileşeninde "Interpolation" ayarlarını optimize edin. Her karede (frame) veri göndermek yerine, sadece değişiklik olduğunda veya belirli aralıklarla (tick rate) veri gönderimi yapın.

Veri Gönderimini Optimize Etme

  • Interest Management: Oyuncunun sadece yakınındaki nesnelerin verisini almasını sağlayın.
  • Data Compression: Gönderilen verileri küçültmek için bit-packing yöntemlerini kullanın.
  • Tick Rate Ayarı: Sunucunun saniyede kaç kez güncelleneceğini (örneğin 30 veya 60) oyunun türüne göre belirleyin.

Yaygın Hatalar ve Çözümleri

1. Yetkisiz Değişiklikler

İstemci tarafında yapılan bir değişken değişikliğinin sunucuya yansımaması en sık karşılaşılan hatadır. Her zaman IsServer kontrolü yaparak mantıksal işlemleri sunucuda gerçekleştirin.

2. "Ghost" Nesneler

Sahneden silinen ancak ağda hala var görünen nesnelerdir. NetworkObject.Despawn() fonksiyonunu doğru kullandığınızdan emin olun.

Güvenlik: İstemciye Güvenmeyin

Asla istemciye güvenmeyin. Tüm kritik hesaplamaları (hasar, hız, envanter yönetimi) sunucu tarafında yapın ve istemciden gelen verileri her zaman doğrulayın.

Mobil Cihazlarda Senkronizasyon

Mobil cihazlarda bağlantı kopmaları ve veri kısıtlamaları daha yaygındır. Bu nedenle "reconnection" (tekrar bağlanma) mekanizmalarını çok iyi kurgulamanız gerekir.

Unity'nin Hangi Sürümünü Kullanmalıyım?

Her zaman Unity'nin LTS (Long Term Support) sürümlerini tercih edin. 2026 yılı itibarıyla en güncel LTS sürümü, ağ kütüphaneleri için en stabil desteği sunacaktır.

Sonuç

Unity üzerinde çok oyunculu senkronizasyon sistemi kurmak, sabır ve sürekli test gerektiren bir süreçtir. Başarı, sadece doğru araçları seçmekle değil, ağ trafiğini nasıl optimize ettiğinizle ve sunucu-istemci arasındaki yetki hiyerarşisini ne kadar iyi kurduğunuzla ilgilidir. Başlangıçta basit bir "Player Movement" senkronizasyonu ile başlayıp, sistemi kademeli olarak karmaşıklaştırmak en sağlıklı yöntemdir. Unutmayın ki, teknik bir sorunla karşılaştığınızda Unity'nin resmi dokümantasyonları ve geliştirici toplulukları, karşılaştığınız spesifik ağ hatalarını gidermek için en güvenilir kaynaklardır.

Ağ Mimarisi Seçiminde Karar Verme Kriterleri

Projeniz için doğru ağ mimarisini seçmek, oyununuzun türüne ve hedef kitlenize bağlıdır. Bir FPS oyunu ile sıra tabanlı bir strateji oyunu aynı senkronizasyon yöntemini kullanamaz. İşte seçim yaparken dikkate almanız gereken temel kriterler:

  • Oyun Türü: Hızlı aksiyon gerektiren oyunlar için "Server Authoritative" (Sunucu Yetkili) model zorunludur.
  • Oyuncu Sayısı: 4 kişilik bir eşli oyun ile 64 kişilik bir savaş oyunu farklı bant genişliği gereksinimlerine sahiptir.
  • Bütçe: Dedicated sunucular maliyetli olabilir; P2P (Peer-to-Peer) modelleri ise geliştirme maliyetini düşürür ancak hile riskini artırır.

Proje Gereksinimlerine Göre Mimari Karşılaştırma Tablosu

Özellik Client-Server (Dedicated) Relay (P2P Destekli) Listen Server
Güvenlik Çok Yüksek Düşük Orta
Maliyet Yüksek Düşük Yok
Gecikme Sunucuya Bağlı Değişken Host Oyuncuya Bağlı

NetworkTransform ve Interpolation Teknikleri

Nesne hareketlerini senkronize ederken sadece pozisyon verisi göndermek, ağdaki küçük gecikmelerde nesnelerin "ışınlanıyormuş" gibi görünmesine (jitter) neden olur. Bunu engellemek için Interpolation (Ara Değerleme) ve Extrapolation (Tahminleme) teknikleri kullanılır.

Interpolation Nedir ve Nasıl Uygulanır?

Interpolation, istemcinin aldığı iki veri paketi arasındaki süreyi kullanarak nesnenin hareketini yumuşatmasıdır. Gelen veriyi anlık olarak uygulamak yerine, 100ms gecikmeli bir tampon (buffer) oluşturarak hareketin akıcı görünmesini sağlar.

Spesifik Senaryolar: Karakter Hareket Senkronizasyonu

Karakter hareketi, bir oyunun en kritik ağ senkronizasyon noktasıdır. "Client-Side Prediction" (İstemci Tarafı Tahminleme) yöntemi, oyuncunun hareketine anında tepki verirken, sunucu bu hareketi onaylar.

  1. Girdi Gönderme: İstemci, klavye/fare girdilerini sunucuya gönderir.
  2. Tahminleme: İstemci, sunucudan cevap gelmesini beklemeden kendi karakterini hareket ettirir.
  3. Doğrulama: Sunucu, gelen girdiyi işler ve karakterin olması gereken pozisyonu istemciye geri döner.
  4. Düzeltme: Eğer istemci ile sunucu pozisyonu arasında fark varsa, istemci karakteri sunucudan gelen veriye "snap" (hızlı geçiş) yapar veya yumuşatılmış bir şekilde düzeltir.

Ağ Hatalarını Ayıklama (Debugging) Stratejileri

Ağ hataları genellikle "gözle görülmeyen" hatalardır. Bu hataları ayıklamak için şu araçları ve yöntemleri kullanmalısınız:

  • Network Profiler: Unity'nin dahili ağ profilcisi ile hangi nesnelerin ne kadar paket gönderdiğini izleyin.
  • Packet Loss Simülasyonu: Geliştirme aşamasında, ağ ayarlarından %5-10 arası paket kaybı simüle ederek oyunun nasıl tepki verdiğini test edin.
  • Loglama: Kritik ağ olaylarını (bağlantı kopması, RPC hatası) mutlaka bir log dosyasına yazdırın.

Yaygın Geliştirici Hataları

  • Aşırı Veri Gönderimi: Her karede (Update) tüm değişkenleri senkronize etmeye çalışmak. Sadece değişen verileri (dirty bits) gönderin.
  • Büyük Veri Paketleri: Tek bir RPC çağrısında devasa veri yapıları göndermek. Veriyi parçalara ayırın veya sıkıştırın.
  • Senkronizasyonun Gereksizliği: Görsel olan ancak oyun mantığına etki etmeyen (örneğin bir ağacın yaprak sallanması) her objeyi ağa dahil etmek.

Güvenlik: Sunucu Tarafında Doğrulama (Server-Side Validation)

İstemci tarafında yapılan kontroller (örneğin: "oyuncunun canı 0'dan küçükse ölür") asla yeterli değildir. Bir hileci, istemci kodunu manipüle ederek canını sürekli 100'de tutabilir. Bu nedenle:

Tüm oyun mantığı (hasar hesaplama, hız sınırı, envanter değişiklikleri) sunucuda bir "ServerRpc" fonksiyonu ile tetiklenmeli ve sunucu bu işlemin geçerli olup olmadığını kontrol etmelidir.

Malzeme ve Araç Seçimi

Projeniz için doğru araçları seçmek, kurulum sürecini hızlandırır:

  • Unity Netcode for GameObjects (NGO): Genel amaçlı, orta ölçekli projeler için standarttır.
  • Unity Transport (UTP): Düşük seviyeli veri iletimi için kullanılır.
  • Unity Relay: NAT geçişi (NAT Punchthrough) gerektiren durumlarda sunucu maliyetini minimize eder.
  • Unity Gaming Services (UGS): Lobi yönetimi ve oyun içi eşleştirme (matchmaking) için entegre çözümler sunar.

Mobil Cihazlarda Senkronizasyon ve Veri Yönetimi

Mobil cihazlar, Wi-Fi'den 4G/5G'ye geçişlerde veya sinyal zayıflamalarında "packet burst" (paket patlaması) yaşayabilir. Bu durumu yönetmek için:

  • Bant Genişliği Optimizasyonu: Mobil cihazlarda gönderilen veri boyutunu minimuma indirin.
  • Bağlantı Kesilme Yönetimi: Oyuncuya "Bağlantı kesildi, tekrar bağlanılıyor..." uyarısını vererek bir "Reconnection" döngüsü başlatın.
  • Batarya Tasarrufu: Çok sık veri gönderimi, mobil cihazlarda ısınmaya ve pil tüketimine neden olur. Gönderim sıklığını (Send Rate) optimize edin.

Özet: Başarılı Bir Senkronizasyon İçin Kontrol Listesi

  1. Sunucu yetkili (Authoritative) mimariyi temel alın.
  2. NetworkVariable kullanımını sadece kritik verilerle sınırlayın.
  3. Görsel efektleri ve sesleri yerel (Local) olarak tetikleyin, ağ üzerinden göndermeyin.
  4. Tüm kritik işlemleri ServerRpc ile sunucuya doğrulattırın.
  5. Projenizi farklı ağ hızlarında (3G, 4G, Fiber) test edin.

Ağ Mimarisi Seçiminde Karar Verme Kriterleri

Doğru ağ mimarisini seçmek, oyununuzun türüne ve hedef kitlenize bağlıdır. Bir FPS oyunu ile sıra tabanlı bir strateji oyununun ihtiyaç duyduğu senkronizasyon yöntemleri birbirinden tamamen farklıdır.

  • Gerçek Zamanlılık: Aksiyon oyunları düşük gecikme süresi (low latency) gerektirir.
  • Oyuncu Sayısı: 4 kişilik bir co-op oyun ile 64 kişilik bir battle royale oyununun sunucu yükü farklıdır.
  • Bütçe: Dedicated sunucular maliyetli iken, Peer-to-Peer (P2P) yapılar ücretsiz ancak güvensizdir.
  • Platform: Mobil cihazlarda veri tüketimi kısıtlıdır; bu nedenle daha az veri gönderen mimariler tercih edilmelidir.

Proje Gereksinimlerine Göre Mimari Karşılaştırma Tablosu

Mimari Avantajları Dezavantajları İdeal Kullanım Alanı
Dedicated Server Yüksek güvenlik, adil rekabet Yüksek maliyet, kurulum zorluğu Rekabetçi FPS, MOBA
Relay (Host-Client) Düşük maliyet, kolay kurulum Host avantajı (lag), güvenlik riskleri Küçük arkadaş grupları, co-op
P2P (Peer-to-Peer) Sunucu maliyeti yok Hileye çok açık, kararsız bağlantı Basit sıra tabanlı oyunlar

NetworkTransform ve Interpolation Teknikleri

Nesne hareketlerini senkronize ederken, her karede veri göndermek bant genişliğini tüketir. NetworkTransform bileşeni bu süreci optimize eder ancak "jitter" (titreme) sorununa yol açabilir.

Interpolation (Ara Değerleme): İstemci tarafında, gelen iki paket arasındaki boşluğu yumuşatarak karakterin ışınlanıyormuş gibi görünmesini engeller. Nesneleri doğrudan pozisyona taşımak yerine, Vector3.Lerp veya Vector3.MoveTowards kullanarak hedef konuma yumuşak geçiş yaptırmalısınız.

Spesifik Senaryolar: Karakter Hareket Senkronizasyonu

Karakter hareketi, ağ üzerindeki en hassas konudur. İstemci tarafında "Client-Side Prediction" (İstemci Tarafı Tahmini) kullanarak oyuncunun kendi hareketini anında görmesini sağlayın. Sunucu, bu hareketi doğrular ve gerekirse istemciyi düzeltir (Server Reconciliation).

İpucu: Karakterin sadece "Input" verilerini (W, A, S, D tuşları) sunucuya gönderin, pozisyonu doğrudan değiştirmeyin. Sunucu, bu girdileri işleyerek sonucu istemciye geri göndermelidir.

Ağ Hatalarını Ayıklama (Debugging) Stratejileri

Ağ hatalarını çözmek için Unity'nin sağladığı araçları etkin kullanmalısınız:

  • Network Profiler: Hangi nesnenin ne kadar veri (byte) gönderdiğini izleyin.
  • Simulated Latency: Unity Netcode içerisinde yer alan "Network Simulator" ile yüksek gecikme ve paket kaybı senaryolarını test edin.
  • Log Analizi: NetworkLog sınıfını kullanarak ağ hatalarını konsola dökün ve hata kaynaklarını belirleyin.

Yaygın Geliştirici Hataları

Geliştiricilerin en sık yaptığı hatalar şunlardır:

  1. Tüm Verileri NetworkVariable Yapmak: Sadece değişmesi gereken ve herkesin bilmesi gereken verileri bu şekilde tanımlayın.
  2. ClientRpc İçinde Ağ İsteği Yapmak: ClientRpc'ler sadece görsel/işitsel geri bildirim için kullanılmalıdır; oyun mantığı için kullanılmamalıdır.
  3. Sunucu Doğrulaması Eksikliği: İstemciden gelen "canım 100 arttı" gibi verileri sorgusuz kabul etmek, hileye davetiye çıkarır.

Güvenlik: Sunucu Tarafında Doğrulama (Server-Side Validation)

Asla istemciye güvenmeyin. İstemci tarafında yapılan tüm işlemler manipüle edilebilir. Sunucu, her zaman istemciden gelen veriyi kontrol etmelidir.

  • Hız Kontrolü: Oyuncu, belirlenen maksimum hızdan daha hızlı hareket ediyorsa sunucu bunu düzeltmelidir.
  • Menzil Kontrolü: Bir oyuncu, haritanın diğer ucundaki düşmana ateş ediyorsa, sunucu bu vuruşu geçersiz saymalıdır.
  • Envanter Doğrulama: Eşya kullanımı veya ticareti, sunucu onaylı bir mantıkla yürütülmelidir.

Malzeme ve Araç Seçimi

Doğru araçları seçmek geliştirme sürecini hızlandırır:

  • Unity Netcode for GameObjects (NGO): Standart ve güncel çözüm.
  • ParrelSync: Aynı bilgisayarda birden fazla Unity projesi açarak ağ testlerini hızlıca yapmanızı sağlar.
  • Unity Transport (UTP): Düşük seviyeli veri iletimi için optimize edilmiştir.

Mobil Cihazlarda Senkronizasyon ve Veri Yönetimi

Mobil cihazlar, Wi-Fi'den 4G/5G'ye geçişlerde veya sinyal zayıflamalarında "packet burst" (paket patlaması) yaşayabilir. Bu durumu yönetmek için:

  • Bant Genişliği Optimizasyonu: Mobil cihazlarda gönderilen veri boyutunu minimuma indirin. Örneğin, float yerine half veya byte kullanın.
  • Bağlantı Kesilme Yönetimi: Oyuncuya "Bağlantı kesildi, tekrar bağlanılıyor..." uyarısını vererek bir "Reconnection" döngüsü başlatın.
  • Batarya Tasarrufu: Çok sık veri gönderimi, mobil cihazlarda ısınmaya ve pil tüketimine neden olur. Gönderim sıklığını (Send Rate) optimize edin.

Özet: Başarılı Bir Senkronizasyon İçin Kontrol Listesi

  • Sunucu yetkili (Authoritative) mimariyi temel alın.
  • NetworkVariable kullanımını sadece kritik verilerle sınırlayın.
  • Görsel efektleri ve sesleri yerel (Local) olarak tetikleyin, ağ üzerinden göndermeyin.
  • Tüm kritik işlemleri ServerRpc ile sunucuya doğrulattırın.
  • Projenizi farklı ağ hızlarında (3G, 4G, Fiber) test edin.
Bu yazıya tepkinizi paylaşın:
Deniz Aydın

On yıllık yaşam tarzı editörlüğü deneyimimle karmaşık süreçleri herkesin anlayabileceği basit adımlara dönüştürüyorum. Okuyucuların günlük yaşam kalitesini artıracak uygulanabilir çözümler üretmeye odaklanıyorum.

Yorumlar (0)

Yorum Yaz