jaringan multipemain dengan fisika

12

Saya ingin tahu bagaimana jaringan multi pemain dengan fisika diterapkan dalam game balap. Kami memiliki dunia fisik dengan beberapa kendaraan yang bergerak cepat yang dikendalikan oleh orang yang berbeda. Katakanlah kendaraan memiliki senjata dan dapat saling menembak (Twisted Metal, Vigilante v8)

Saya cemas tentang hit dan tabrakan. Server resmi atau alternatif yang lebih baik?

Vitali Kotik
sumber

Jawaban:

5

Biasanya, Server digunakan, menyimpan keadaan "kebenaran" yang secara berkala dibagi dengan Klien. Tabrakan terjadi secara independen di Klien dan Server, dengan status Klien diperkirakan dari kondisi sebelumnya menggunakan proses yang mirip dengan apa yang biasanya disebut Dead Reckoning . Ketika keadaan Server mencapai Klien, jika ada perbedaan, Klien melakukan transisi dari kondisi saat ini ke yang baru saja diterima sebagian besar melalui interpolasi.

Namun, dengan banyak objek tabrakan dapat menjadi masalah nyata, oleh karena itu apa yang biasa dilakukan adalah menjaga waktu simulasi Klien sedikit di belakang waktu simulasi Server untuk memungkinkan berbagai tingkat tambahan fleksibilitas. Artikel ini tentang netcode Mesin Sumber Valve cukup explicative. Juga, jika Anda masih ragu tentang apa middleware jaringan / perpustakaan untuk digunakan, saya sarankan Anda untuk melihat ke RakNet dan komponen "ReplicaManager3" nya .

Neenster
sumber
2

Ada beberapa hal yang bisa Anda lakukan.

  1. Anda dapat memusatkan semua objek fisika di server dan menyelaraskan koordinat ke objek pemain di semua klien. Ini adalah yang termudah dan berfungsi tanpa banyak kekurangan, namun ia menggunakan banyak sumber daya dan membutuhkan banyak bandwidth. Anda dapat mengoptimalkan penggunaan bandwidth dengan hanya mengirimkan nilai ke pemain dari pemain lain yang berada dalam radius tertentu.

  2. Anda dapat melakukan seperti yang disebutkan Neenster dan meminta server dan klien mensimulasikan fisika, seringkali server akan memperbaiki klien. Ini berarti semua klien menghitung ada sendiri fisika untuk setiap pemain, dan Anda akan menyinkronkan peristiwa penekanan tombol melalui server memberikan lintasan setiap pemain pada setiap klien. Setiap, katakanlah, 5 detik server menyiarkan simulasi fisika dan semua klien menerima perubahan. Ini mungkin menciptakan sedikit penyeimbangan yang sering tidak diperhatikan, tetapi selama jeda jaringan dan kehilangan paket (tidak terhindarkan dengan lalu lintas UDP yang tinggi) Anda akan melihat pemain Anda dan / atau pemain lain berkeliaran di sekitar layar dan mengubah posisi dengan cepat dan choppily (apakah itu kata?).

  3. Anda dapat meminta setiap klien menghitung fisika sendiri dan menyinkronkan koordinatnya. Ini membuatnya sulit untuk mensimulasikan fisika pada objek yang dibagikan di antara klien. Ini konsep yang cukup rumit untuk diterapkan jika Anda ingin melakukan sesuatu yang menarik, karena objek tertentu tidak harus milik klien mana pun.

Yang pertama mungkin yang paling mudah dan memungkinkan Anda memiliki sekitar 4-5 pemain dengan sedikit lag. Setiap pertandingan harus memiliki server sendiri. Jika Anda melakukan pencocokan LAN, ini adalah cara yang mudah.

Yang kedua mungkin yang paling praktis, namun bisa sulit untuk diterapkan. Ini juga cukup banyak akal untuk menjalankan simulasi fisika di server. Jika Anda memiliki server terpusat, Anda mungkin perlu memuat saldo ke beberapa mesin, mungkin mengizinkan 10 kecocokan server, memuat kecocokan baru ke server dengan kecocokan paling sedikit.

Yang ketiga jelas yang paling tidak membuat stres di server, dan mungkin solusi terbaik jika Anda melakukan skema jaringan peer to peer. Seperti yang saya sebutkan, mungkin sulit untuk menyinkronkan objek selain objek pemain Anda karena objek tersebut juga dapat diubah oleh klien lain.

Saya tidak bisa memberi tahu Anda mana yang harus digunakan karena saya tidak tahu cara kerja gim Anda. Yang bisa saya lakukan adalah memberi Anda fakta. Jika Anda memiliki pertanyaan lebih lanjut, jangan ragu untuk berkomentar.

tsturzl
sumber
Anda menyarankan bahwa membiarkan klien melakukan fisika adalah solusi yang dapat diterima, tetapi Anda tidak berhubungan dengan kecurangan.
cubuspl42
@ cubuspl42 Untuk upaya tetap pada topik saya menghilangkan detail. Saya melihat bahwa OP dapat mengeksplorasi solusi lebih lanjut untuk mengeksplorasi cara-cara potensial untuk mengurangi kecurangan.
tsturzl
salah satu cara tersebut adalah memungkinkan penyimpangan dari apa yang masing-masing klien sediakan terbatas pada ambang batas. Misalnya, sebagian besar klien mengatakan objek yang diberikan berada pada posisi 5,8 atau 6,9 tetapi satu melaporkan 12,19 sebagai koordinat, yang mungkin jatuh dari ambang batas dibandingkan dengan seberapa banyak menyimpang dari klien lain. Ini hanya solusi parsial, tetapi sebagian besar game hanya menawarkan solusi parsial untuk menyontek, karenanya mengapa itu masih terjadi. Solusi ini tidak berarti mereka curang, tetapi berarti bahwa posisi mereka perlu diperbaiki dan akan terlihat ketinggalan.
tsturzl
Yah, aku agak tidak setuju. Beberapa jenis curang dapat diperbaiki, beberapa tidak. Sebagai contoh, menurut saya itu adalah desain game yang buruk jika seseorang dapat membuat speedhack untuk penembak online yang kompetitif. Atau beberapa peretasan gila yang memungkinkan Anda untuk terbang di sekitar peta dengan metode godmode dan amunisi tak terbatas (saya percaya itu terjadi di Crysis 1 di beberapa titik). Ini dapat diperbaiki, cukup desain game Anda dengan benar. Hal-hal seperti wallhack hampir tidak dapat diperbaiki (itu akan membutuhkan sumber daya yang sangat besar dari server). Aimbot sebenarnya tidak bisa diperbaiki. Solusi Anda # 3 meningkatkan risiko jenis penipuan terburuk ini.
cubuspl42
@ cubuspl42 Saya pikir Anda tidak tahu apa contohnya. Opsi 3 dapat mencegah masalah yang sedang Anda bicarakan. Anda biasanya memiliki TCP yang membagi kecepatan, dan kemudian Anda dapat dengan mudah memeriksa kecepatan antara klien dan membentuk konsensus, Anda juga dapat melakukan beberapa matematika sederhana untuk menentukan apakah koordinat dari UDP masuk akal mengingat kecepatan yang disediakan dengan asumsi klien Anda memiliki jam disinkronkan (dapat dibuat pada koneksi dari jam HW).
tsturzl