Saya pemrograman server khusus di C # menggunakan BeamServer2 DLL. Pada awalnya saya ingin melihat pemain lain bergerak di peta Omuni kami yang sudah dibuat. Ini saya lakukan dengan hanya mengirim posisi Anda ke server setiap frame. Ini berhasil dan saya bisa bermain dengan beberapa teman tetapi gerakan itu tidak laggfree. Jadi saya mulai mencoba untuk menambahkan perataan gerakan dan juga beberapa keamanan sehingga mereka tidak bisa hanya mengirim posisi palsu ke server tanpa server menghentikannya dari menjangkau klien lain.
Apa yang saya lakukan, saya membuat masterClient yang memiliki movementController pada remotePlayer. Ketika klien ingin pindah, dia bergerak secara lokal dan mengirim pesan ke server dengan arah untuk pindah. Server kemudian mengambil kecepatan dan mengirimkannya ke masterClient. MasterClient daripada memindahkan remotePlayer sama seperti remotePlayer bergerak sendiri. Ketika dia berhenti bergerak, dia mengirim pesan dengan posisi di dalamnya. Masterclient akan memeriksa apakah posisi yang ia datangi sedekat posisi yang ia miliki dari klien, jika realistis menurut ping klien, server menempatkannya pada posisi klien.
Ini berfungsi, tetapi saya masih memiliki masalah tunda dan saya tidak yakin bagaimana cara memperbaikinya. Saya harus membuat gerakan memuluskan pada klien tetapi saya menemukan diri saya bahwa saya hanya bisa lerp (x / 2, y / 2, z / 2) ke posisi dan menempatkannya pada posisi nyata frame berikutnya, saya gagal pada saat itu dan saya akan mencoba lagi nanti. Bahkan jika itu ditambahkan, saya tidak yakin apakah lagg diperbaiki.
Ada teknik, saran, pertanyaan, ...? Terima kasih, Diede.
sumber
Bagian yang menantang dalam kompensasi lag adalah bahwa Anda akan mendapatkan pembaruan dari klien yang rusak. Perintah klien laggy yang dikirim pada waktu T mungkin sangat baik tiba setelah perintah klien non-laggy dikirim pada T + 40ms. Menerapkan perintah dalam urutan yang Anda dapatkan akan menyebabkan semua jenis kejijikan. Melakukannya dengan benar di sisi lain melibatkan waktu belitan kembali dan memutar ulang semua perintah yang telah dikeluarkan sejak itu.
Tidak ada cara mudah untuk mengatasi hal ini, tetapi ada beberapa solusi yang valid. Anda dapat menemukan yang relatif mudah dijelaskan di sini .
Ada banyak penelitian di bidang ini, lihat-lihat!
sumber
Saya akan membuat klien seperti itu adalah permainan non-jaringan. Yaitu, apa pun yang Anda lakukan, Anda melakukannya secara langsung pada klien. Kemudian tambahkan, sejajar dengan itu, kode jaringan Anda. Kode ini akan mendapatkan data perpindahan. Sederhana seperti dari koordinasi, arah dan kecepatan. Itu hanya mengirimkan ini ke server yang memvalidasi. Server mengirimkan Anda posisi ok atau baru.
Jadi Anda memiliki semua kode klien Anda berjalan seperti itu sendirian di dunia. Maka itu hanya menerima data koreksi baru dari server atau ok. Jika Anda menekan maju dan tahan selama sepuluh detik, maka server hanya akan menerima satu data itu. Anda mungkin mempertimbangkan mengirim / menerima data setiap detik meskipun Anda hanya menahan tombol maju, atau jika Anda menekan lonjakan lag Anda mungkin berjalan selamanya.
sumber