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
- İstemci girdiyi sıra numarasıyla sunucuya gönderir ve aynı anda kendi karakterini yerelde simüle eder.
- Gönderilen girdiler bir tamponda saklanır.
- Sunucudan "girdi #42 sonrası konumun X" mesajı gelince istemci durumunu buna ayarlar ve #43'ten sonraki onaylanmamış girdileri yeniden uygular.
- 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.
İlgili Oyun Programlama soruları
- Oyun döngüsü (game loop) nedir? Sabit ve değişken zaman adımı arasındaki fark nedir?
- Delta time nedir, neden kullanılır?
- Object pooling nedir, neden kullanılır?
- Entity Component System (ECS) nedir? Klasik nesne yönelimli yapıdan farkı nedir?
- Çarpışma tespitinde broad phase ve narrow phase nedir?
- Bir oyunda kayıt (save) sistemi nasıl tasarlanır? Serileştirmede nelere dikkat edilir?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.