Saya memiliki permainan multipemain dan saya melakukan prediksi sisi klien, tetapi beberapa pemain bisa minum ramuan dan menjadi tidak terlihat ...
Masalahnya adalah ketika mereka menjadi tidak terlihat, saya tidak membagikan apa pun yang bisa digunakan klien untuk mengetahui dia ada di sana, jadi ketika seorang pemain mencoba masuk ke ubin yang ditempati oleh pemain yang tidak terlihat, dia memperkirakan bahwa dia berhasil, dan kemudian mendapat koreksi posisi jelek yang dikirim oleh server.
Salah satu solusinya adalah membagikan sesuatu sehingga klien dapat mengetahuinya, tetapi kemudian peretas dapat menggunakannya untuk mencari tahu di mana pemain yang tidak terlihat, curang.
Tapi saya sudah memecahkan prediksi pergerakan reguler, ini bekerja dengan sempurna.
sumber
Jawaban:
Ini dapat dianggap sebagai masalah animasi. Jika koreksi posisi kembali dari server karena upaya untuk pindah ke objek yang tidak terlihat, kirim kembali tidak hanya koreksi tetapi juga sebuah bendera yang menunjukkan mengapa koreksi itu diperlukan. Alih-alih pemain muncul mundur, dia mungkin melakukan animasi mundur "woah", membuatnya lebih bisa dipercaya terlihat seperti dia baru saja mengalami sesuatu.
Dalam game yang menggunakan pendekatan ini, tidak jarang menghilangkan tembus pandang (setidaknya untuk sementara) dari apa pun yang terjadi. Di antara hal-hal lain ini memberikan insentif bagi pemain yang tidak terlihat untuk menghindari keramaian atau terlalu dekat dengan karakter lain, mengurangi frekuensi terjadinya tabrakan dengan pemain yang tidak terlihat. Jadi, bahkan jika animasi Anda untuk jenis tabrakan ini lemah (atau tidak ada), itu agak disembunyikan oleh karakter yang tak terlihat muncul ke visibilitas dan jelas telegraphing kepada semua orang apa yang baru saja terjadi.
Kebutuhan animasi dapat dihapus dengan tidak membiarkan pekerjaan tembus pandang dari jarak dekat. Ini bahkan memberikan lebih banyak insentif kepada pemain yang tidak terlihat untuk menghindari mendekati karakter lain. Ini adalah pendekatan umum untuk game berbasis siluman dan AI (ganti "tidak terlihat" dengan "tidak terlihat sesuai target") dan dapat dilihat di game PvP seperti World of Tanks. Tidak perlu khawatir tentang respons tabrakan dengan karakter yang tidak terlihat jika Anda tidak ada yang terlihat cukup dekat untuk Anda bertabrakan (dalam batas latensi).
Solusi Dracor untuk mengabaikan tabrakan dengan benda tak kasat mata juga bagus. Sekali lagi ini membutuhkan beberapa animasi (untuk klien pemain yang tidak terlihat) sehingga objek tidak hanya memotong melalui avatar pemain di layarnya. Jika tidak ada yang lain, Anda dapat menyebabkan objek yang terlihat selalu mendorong yang tidak terlihat sehingga pemain yang tidak terlihat dipindahkan secara otomatis dari server jika seseorang bertabrakan dengannya.
Tabrakan tak kasat mata agak sulit. Mungkin menguntungkan untuk hanya menonaktifkan tabrakan pada mereka karena tidak ada yang bisa melihat apakah dua objek tak terlihat saling berdekatan (dengan asumsi "tidak terlihat" kami maksudkan bahwa kedua objek tidak terlihat oleh klien yang sama). Jika salah satu objek menjadi terlihat secara otomatis kembali ke respon tabrakan terlihat-tidak terlihat (dorong objek tidak terlihat).
Ini semua menjadi lebih sulit jika tembus pandang memiliki set rumit siapa yang dapat melihat siapa. Solusi pertama atau kedua di atas kemungkinan terbaik di sini jika Anda membutuhkannya. Tidak setiap masalah seperti ini membutuhkan solusi teknis; banyak hanya membutuhkan solusi desain (mis., jangan izinkan fitur ini untuk desainer Anda).
sumber
Saya benar-benar hanya melihat dua opsi di sini jika Anda tidak ingin memberi tahu klien di mana pemain yang tidak terlihat adalah: 1) Anda mengabaikan tabrakan unit untuk pemain yang tidak terlihat - solusi sederhana, dan pemain tidak akan dapat menemukan pemain yang tidak terlihat oleh tes tabrakan baik. 2) Setelah memutuskan jalur yang diprediksi, Anda mengirim server jalur yang diprediksi dan memperbaiki jalur itu sendiri di sisi server, lalu mengirim jalur yang baru kembali.
sumber
Kecuali saya salah memahami sesuatu, solusinya sederhana. Jangan mengirim informasi klien pada semua pemain yang tidak terlihat, hanya mereka yang berada dalam jangkauan yang dapat mengalami benturan dalam batas gerak selama interval yang diprediksi. Dengan kata lain, jika klien hanya harus memprediksi 200 ms ke masa depan, hanya mengirim informasi tentang pemain tak terlihat dalam
max_player_velocity units/sec * 1/5 sec
unit jauh.sumber