Menerapkan perataan jaringan

13

Kami membuat penembak orang pertama multipler. Klien mengirimkan posisinya ke server dengan kecepatan tetap (saat ini pada 10Hz). Server mengirim satu pesan yang berisi posisi semua pemain ke semua pemain dengan kecepatan yang sama (10Hz).

Seperti yang diharapkan, gerakan ini cukup berombak karena permainan 60fps hanya menerima pembaruan 10 kali per detik. Apa cara terbaik untuk menghaluskan gerakan ini? Cara yang paling jelas adalah interpolasi antara dua paket terakhir, sehingga interpolasi selesai saat kami menerima paket baru. Tapi ini menambahkan penundaan 100 ms instan untuk semua pemain.

Cara lain adalah dengan menggunakan kecepatan dan akselerasi yang disimpulkan dari beberapa paket terakhir untuk memprediksi di mana pemain berada sebelum paket berikutnya tiba, namun jika prediksi salah, pemain akan cenderung melompat segera setelah paket baru diterima. .

Adakah yang tahu bagaimana judul AAA mengatasi masalah ini?

Hannesh
sumber

Jawaban:

9

Mereka melakukan apa yang baru saja Anda katakan - salah satu dari dua pendekatan itu, atau kompromi di antara mereka. (mis. menerima penundaan kecil dan interpolasi jika memungkinkan, dan memperkirakan ketika ping melebihi penundaan itu.) Alih-alih melompat (juga dikenal sebagai 'gertakan') kembali ke posisi yang diperbaiki, Anda biasanya melakukan semacam interpolasi antara prediksi yang salah dan nilai yang dikoreksi, menghaluskannya, jika mungkin. Anda juga menangani koreksi di masa lalu untuk mengurangi jumlah koreksi yang perlu Anda terapkan.

Ini adalah pertanyaan yang sering diajukan dan ada beberapa tautan kanonik yang mungkin akan Anda temukan di tempat lain di gamedev.stackexchange.com jika Anda mencari, dan mereka termasuk yang berikut:

Apa yang perlu diketahui setiap programmer tentang jaringan game (ini merangkum hal-hal dalam dua tautan berikutnya)

Sumber Multiplayer Networking

Arsitektur Jaringan yang Tidak Nyata

Kylotan
sumber