Saya sedang mengerjakan game seluler Unity, seperti versi multipemain dari Temple Run . Saya melihat latensi jaringan yang fluktuatif (umumnya 200-500 ms) karena platform seluler.
Dua karakter pemain ditampilkan berjalan di jalur yang sama dan harus melakukan tindakan sederhana (melompat, slide, powerup, dll.) Untuk melewati rintangan.
Ketika pesan datang terlambat, permainan menganggap pemain jarak jauh melewati rintangan. Ini biasanya bekerja dengan baik, tetapi jika seorang pemain terbunuh oleh sebuah rintangan, saya ingin pemain jarak jauh itu tampak mati pada rintangan / posisi yang sama dengan pemain lokal. Karena latensi, pemain jarak jauh tampaknya telah melewati rintangan sebelum pesan mengumumkan kematian mereka bahkan tiba.
Bagaimana saya bisa membuat para pemain disinkronkan?
Saya mencoba memindahkan pemain jarak jauh kembali ke posisi mati pemain lokal segera setelah pesan kematian tiba, terlihat canggung secara visual dan mungkin menimbulkan masalah sinkronisasi lainnya.
sumber
Untuk melengkapi jawaban Anko, Anda dapat mengubah sedikit desain game Anda dengan menambahkan konsekuensi dari rintangan yang gagal setelah kegagalan, misalnya, hasil lompatan yang gagal mendarat di genangan lumpur yang mendiskualifikasi pemain. Dengan cara ini pemain lain memperhatikan kegagalan dengan melihat yang lain jatuh dalam lumpur, sementara pemain yang gagal melihatnya segera.
Berikut ini adalah posting blog yang bagus tentang masalah ini (bukan yang baru-baru ini tetapi cukup menarik): Manajemen Waktu dan Sinkronisasi Darrin West .
sumber
Apakah penting bagi pemain lokal untuk mengetahui posisi pasti dari kematian pemain jarak jauh? Katakanlah pemain jarak jauh tidak bisa melompati salah satu hambatan Anda, dan karenanya mati.
Pemain yang mati akan melihat kematian mereka segera, dan akan melanjutkan dari lokasi kecelakaan. Tidak ada yang ajaib di sini.
Pemain lokal (yang masih hidup dan menendang) akan melihat pemain jarak jauh berhasil melewati rintangan. Pemberitahuan kematian akan masuk. Pemain jarak jauh akan tersandung pada kaki mereka, jatuh, dan perlahan-lahan menghilang. Lain kali Anda tahu posisi pemain jarak jauh, pemain akan menghilang ke posisi tepat itu, berjalan normal kembali. Dalam pengaturan seperti itu, pemain akan menyadari latensi, tetapi latensi akan direpresentasikan sebagai elemen permainan (tersandung ke bawah) daripada pemain yang dengan tiba-tiba muncul dan menghilang.
Jika kecepatan kedua pemain konstan, lintasan lari sudah ditentukan sebelumnya, dan waktu yang diperlukan untuk pulih dari jatuh diketahui, Anda bisa menghilangkan bagian yang memudar / menghilang sepenuhnya. Bayangkan seorang pemain jarak jauh sekarat di salah satu rintangan. Representasi lokalnya masih berjalan ketika pemberitahuan masuk. Pemain ditampilkan tersandung segera. Butuh waktu bagi mereka untuk bangun dan mulai berlari lagi. Sebenarnya, dibutuhkan banyak waktu seolah-olah mereka terlihat sekarat di rintangan. Dengan demikian, ketika mereka berdiri dan berjalan lagi, posisi lokal dan jarak jauh disinkronkan.
sumber