Saya mencoba menerapkan sistem fisika klien / server menggunakan Bullet namun saya mengalami masalah dalam hal sinkronisasi.
Saya telah menerapkan status gerakan khusus yang membaca dan menulis transformasi dari objek game saya dan berfungsi secara lokal, tetapi saya telah mencoba dua pendekatan berbeda untuk game jaringan:
- Objek dinamis pada klien yang juga ada di server (mis. Bukan puing acak dan barang tidak penting lainnya) dibuat kinematik. Ini berfungsi dengan baik tetapi objek tidak bergerak dengan sangat lancar
- Objek dinamis pada keduanya tetapi setelah setiap pesan dari server bahwa objek telah bergerak saya mengatur kecepatan linier dan sudut ke nilai-nilai dari server dan memanggil btRigidBody :: continueToTransform dengan transform pada server. Saya juga memanggil btCollisionObject :: activ (true); untuk memaksa objek memperbarui.
Maksud saya dengan metode 2 adalah pada dasarnya melakukan metode 1 tetapi membajak Bullet untuk melakukan prediksi orang miskin alih-alih melakukan sendiri untuk memuluskan metode 1, tetapi ini tampaknya tidak berhasil (karena alasan yang tidak 100% jelas untuk saya bahkan melangkah melalui Bullet) dan benda-benda terkadang berakhir di tempat yang berbeda.
Apakah saya menuju ke arah yang benar? Bullet tampaknya memiliki kode interpolasi sendiri bawaan. Bisakah itu membantu saya membuat metode 1 bekerja lebih baik? Atau kode 2 metode saya tidak berfungsi karena saya sengaja menginjaknya?
EDIT: Masalah lain dengan metode 1 yang baru saya perhatikan adalah bahwa respons tabrakan akan jauh untuk tabrakan terhadap objek yang tidak disinkronkan. Tubuh kinetik semacam menembak barang hingga tak terbatas kadang-kadang karena mereka tidak dapat dilumpuhkan kembali.