Bagaimana menangani penemuan jalur dan pergerakan entitas di dunia jaringan besar?

12

masukkan deskripsi gambar di siniMempertimbangkan gambar di atas dengan ubin dibagi menjadi kotak 32x32, saya memiliki entitas yang ditandai untuk 'aggro' pemain terdekat yang mendekati itu. Saya ingin monster ini mengejar pemain secara ideal (dan terus mengejar pemain untuk sementara waktu). Saat ini, satu-satunya gerakan saya adalah interpolator sederhana saya untuk entitas jarak jauh dan ini berfungsi karena kesenjangan antara pembaruan gerakan agak kecil.

Saya tidak bisa berhasil memberi tahu klien bahwa monster itu ingin pindah ke posisi dia berada, karena hal itu akan menyebabkan entitas bergerak lebih cepat dari yang seharusnya (ini mungkin dapat diselesaikan dengan menggunakan beberapa matematika untuk interpolasi co. -Efficent) tetapi yang lebih penting itu tidak terlihat realistis dan dapat memotong dinding! Saya tidak ingin mensimulasikan seluruh gerakan di server jika dapat dihindari ... meskipun saya rasa saya bisa tetapi itu masih tidak akan menyelesaikan masalah kliping. Saya menduga solusinya melibatkan beberapa pencarian jalan dan mengirim pembaruan node periodik klien dan membiarkan mereka mensimulasikan gerakan tapi saya tidak yakin.

Terima kasih!

Vaughan Hilts
sumber

Jawaban:

9

Untuk awal yang sederhana, Anda dapat menerapkan perilaku kemudi . Secara khusus mencari perilaku . masukkan deskripsi gambar di sini

Selain mencari karakter harus menggunakan penghindaran untuk menghindari rintangan .

masukkan deskripsi gambar di sini

Setelah aspek-aspek tersebut berfungsi, Anda dapat menerapkan beberapa pengikut yang lebih cerdas. Itu akan termasuk menemukan jalan. Sekarang alih-alih mengarahkan ke musuh mereka, musuh akan mengarahkan ke setiap node di jalan yang membawa mereka ke target mereka.

Setelah musuh "cukup dekat", Anda dapat beralih ke perilaku kemudi sepenuhnya. Karena lebih murah daripada pencarian jalur, dan Anda akan mendapatkan hasil yang bagus dalam jarak dekat.

Kemudi juga akan memungkinkan Anda untuk menentukan kecepatan belokan maksimum dan kecepatan maksimum untuk musuh.

Kemudi dapat dikelola pada klien dengan pembaruan berkala dari server untuk memastikan mereka masih di jalurnya.

MichaelHouse
sumber
Apakah ini berarti mensimulasikan perilaku kemudi di server juga atau dapatkah saya 'menjentikkan' entitas di sepanjang jalur secara logis? Saya tidak perlu persiapan besar.
Vaughan Hilts
Kemudi sendiri harus disimulasikan (tidak terlalu berat). Namun, kemudi menuju titik arah dapat diperbarui tanpa simulasi. Cukup pastikan klien berada dalam jangkauan waypoint "saat ini" dan arahkan ke arah waypoint yang benar sebagai "berikutnya". Ini akan melibatkan beberapa gertakan jika entitas keluar jalur dan tiba-tiba diperbarui.
MichaelHouse
+1 untuk Jawaban Hebat. Terima kasih telah menghemat beberapa jam saya.
Md Mahbubur Rahman
1

Saya tidak bisa berhasil memberi tahu klien bahwa monster itu ingin pindah ke posisi dia berada, karena hal itu akan menyebabkan entitas bergerak lebih cepat dari yang seharusnya (ini mungkin dapat diselesaikan dengan menggunakan beberapa matematika untuk interpolasi co. -cukup)

Sebenarnya ini mudah dilakukan. Arah gerakan akan menjadi posisi target dikurangi posisi saat ini. Yang perlu Anda lakukan adalah skala vektor ke kecepatan gerakan yang Anda inginkan. Ulangi setiap frame.

tetapi yang lebih penting itu tidak terlihat realistis dan dapat memotong dinding! Saya tidak ingin mensimulasikan seluruh gerakan di server jika dapat dihindari ...

Anda perlu mensimulasikan gerakan di server. Bagaimana lagi Anda tahu bahwa semua pemain melihat perilaku yang sama?

Anda akan memerlukan beberapa pathfinding dasar. A * adalah standar. Anda bisa menghitung lintasan ke target dan kemudian mengikuti lintasan itu hanyalah kasus pengaturan vektor gerakan seperti di atas. (Atau Anda dapat menggunakan perilaku kemudi seperti pada jawaban Byte56, yang pada dasarnya hal yang sama dengan beberapa tambahan tambahan.)

Kylotan
sumber