Client prediction'ı anlatmanın en sade yolu
Çok oyunculu hareket sistemleri karmaşık görünür. Aslında üç adımdan ibarettir: tahmin et, karşılaştır, düzelt.
Neden gerekiyor
Sunucu otoritesi olmadan hile engellenemez. Ama her girdiyi sunucuya yollayıp cevabı beklerseniz, oyuncu tuşa bastıktan 80 ms sonra hareket eden bir karakter görür. Bu oynanamaz.
Çözüm: istemci hareketi hemen kendi tarafında uygular ve aynı anda girdiyi sunucuya yollar. Yani geleceği tahmin eder.
Üç adım
Tahmin: İstemci girdiyi anında simüle eder ve sonucu tick numarasıyla birlikte bir geçmiş tamponuna yazar.
Karşılaştırma: Sunucu kendi hesabını yolladığında istemci, o tick için sakladığı kendi sonucuyla karşılaştırır.
Düzeltme: Fark tolerans içindeyse hiçbir şey yapılmaz. Değilse pozisyon sunucununkiyle değiştirilir ve o tick'ten bu yana gelen tüm girdiler yeniden oynatılır.
Pratikteki tuzaklar
Simülasyonun deterministik olması şart. Aynı girdi, aynı başlangıç durumu, aynı sonucu vermeli. Time.deltaTime kullanan bir fizik adımı bunu bozar — sabit tick süresi kullanın.
Düzeltmeyi ani yapmayın. Küçük farkları birkaç frame'e yayarak yumuşatmak, oyuncunun ışınlandığını hissetmesini engeller.
Nereden başlamalı
Önce tek oyunculu hareketi sabit tick üzerine kurun ve deterministik hale getirin. Ağ katmanını sonra ekleyin.
Bu sırayı ters çevirenler, hem hareket hem senkronizasyon hatalarını aynı anda ayıklamak zorunda kalıyor. Tecrübeyle sabittir.