Multiplayer oyunlarda server authority, client-side prediction ve lag compensation nasıl çalışır?

Cevap

Server authority

Rekabetçi oyunlarda sunucu tek doğruluk kaynağıdır (authoritative server). İstemciler sadece girdilerini (input) gönderir; sunucu simülasyonu çalıştırır ve sonuçları yayınlar. Böylece istemci "canım 1000" veya "duvarın içinden geçtim" diyemez; hile büyük ölçüde engellenir.

Bedeli gecikmedir: 100 ms ping ile oyuncu tuşa bastıktan sonra hareketi 100 ms sonra görür. Bunu gizlemek için şu teknikler kullanılır:

Client-side prediction ve reconciliation

  1. İstemci girdiyi sıra numarasıyla sunucuya gönderir ve aynı anda kendi karakterini yerelde simüle eder.
  2. Gönderilen girdiler bir tamponda saklanır.
  3. Sunucudan "girdi #42 sonrası konumun X" mesajı gelince istemci durumunu buna ayarlar ve #43'ten sonraki onaylanmamış girdileri yeniden uygular.
  4. Fark küçükse yumuşatılarak düzeltilir; büyükse geri sarılır (rubber banding).

Bunun çalışması için simülasyonun deterministik ve sabit tick'li olması gerekir.

Entity interpolation

Diğer oyuncular tahmin edilmez; sunucudan gelen geçmiş snapshot'lar arasında interpolasyon yapılarak ~100 ms geriden ama akıcı gösterilir.

Lag compensation

Oyuncu, ekranında gördüğü (yani geçmişteki) düşmana ateş eder. Sunucu vuruşu kontrol ederken:

  • Her oyuncunun son ~1 saniyelik konum geçmişini tutar.
  • Ateş edenin gecikmesi + interpolasyon gecikmesi kadar dünyayı geri sarar.
  • Raycast'i o anki konumlara göre yapar, sonra dünyayı geri alır.

Sonuç: "Ben vurdum" hissi korunur. Yan etkisi, kurbanın "duvarın arkasına girmiştim ama öldüm" yaşamasıdır; bu yüzden geri sarma süresine üst sınır konur.

Diğer temel kavramlar

  • Tick rate: Sunucunun saniyede simülasyon adımı (ör. 64 tick).
  • UDP vs TCP: Oyun durumu genellikle UDP üzerinden gönderilir, güvenilirlik gerektiren mesajlar için kendi reliable katmanı kurulur.
  • Delta compression ve interest management: Sadece değişenleri ve oyuncunun ilgisini çeken nesneleri göndermek.
  1. Oyun döngüsü (game loop) nedir? Sabit ve değişken zaman adımı arasındaki fark nedir?OrtaOyun ProgramlamaGame Dev
  2. Delta time nedir, neden kullanılır?KolayOyun ProgramlamaGame Dev
  3. Object pooling nedir, neden kullanılır?OrtaOyun ProgramlamaGame Dev
  4. Entity Component System (ECS) nedir? Klasik nesne yönelimli yapıdan farkı nedir?ZorOyun ProgramlamaGame Dev
  5. Çarpışma tespitinde broad phase ve narrow phase nedir?ZorOyun ProgramlamaGame Dev
  6. Bir oyunda kayıt (save) sistemi nasıl tasarlanır? Serileştirmede nelere dikkat edilir?OrtaOyun ProgramlamaGame Dev

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle