Saya membuat game hack & slash dan saya ingin karakter saya bergerak seperti misalnya di Torchlight, Diablo, dll. Saat ini saya menghasilkan set node untuk semua area walkable di lantai. Ketika saya mengklik di suatu tempat pemain pergi ke sana melalui jalur node interpolasi. Ini tidak terlihat sangat alami. Pemain bergerak seperti robot. Musuh juga menggunakan sistem simpul ini untuk pergerakan dan berbagi masalah yang sama tapi saya punya satu masalah lagi dengan mereka. Ketika musuh mendeteksi pemain, mereka pergi kepadanya dengan jalur terpendek. Terkadang mereka menggunakan jalur yang sama dan berbaris ke pemain alih-alih mengelilinginya. Saya tidak tahu bagaimana membuat musuh memilih jalur yang berbeda dan mengelilingi pemain. Apakah Anda tahu bagaimana saya bisa menyelesaikan masalah ini? Mungkin saya harus menggunakan pendekatan berbeda untuk pergerakan karakter?
Teknik saya saat ini:
Tangkapan layar Torchlight:
---MEMPERBARUI---
Saya ingin tahu bagaimana menghadapi situasi ini:
Situasi 1, saya mengalami gangguan dinamis / statis dalam perjalanan
Situasi 2, Musuh memiliki jalur sam untuk pemain (masuk ke antrian untuk bertarung dengan kami)
Jawaban:
Kemudi Perilaku dalam kombinasi dengan struktur data navigasi .
Ada beberapa cara untuk melakukan ini, tetapi itulah konsep dasarnya. Mungkin lebih mudah menggunakan jala navigasi sehingga Anda dapat menerapkan pencarian jalur di dalam setiap bagian cembung.
Jika Anda bersikeras mempertahankan grafik, Anda bisa menggunakan perilaku Seek ke setiap node di path, daripada mengikuti jalur dari node ke node secara kaku.
Metode lain yang bisa Anda terapkan adalah Path Smoothing tetapi ingatlah bahwa ini cukup mahal secara komputasi.
Semoga itu bisa membantu.
SUNTING:
Untuk membantu masalah penghindaran kendala Anda, gunakan semacam Penghindaran Kendala .
sumber
Jika Anda lebih suka tetap menggunakan nodegraph daripada beralih ke nav mesh seperti yang disarankan orang lain, maka Anda dapat menyelesaikan masalah "berbaris ke pemain alih-alih mengelilinginya" dengan menugaskan setiap musuh untuk menyerang dari arah tertentu.
Ada banyak cara untuk mencapai ini, tetapi saya biasanya menggunakan sistem 'token' untuk menetapkan arah unik ke monster, di mana objek pemain memiliki satu token untuk setiap arah (utara, timur laut, timur, dll). Ketika seorang musuh ingin melangkah ke pemain, ia harus terlebih dahulu memperoleh token darinya. Arah yang ditentukan oleh token memberi tahu monster sisi pemain mana yang diizinkan untuk dilewatinya. Karena pemain hanya memiliki satu token untuk setiap arah, dan monster memerlukan token sebelum mereka dapat menyerang, banyak monster tidak semua akan mencoba untuk jalur ke sisi yang sama dari pemain, yang harus memecah jalur mereka sedikit.
Selain itu Anda mungkin juga ingin menerapkan penalti kecil ke node selama proses pencarian jalur, untuk mendorong monster untuk mendekati dari arah yang cocok dengan token yang mereka miliki. (Yaitu, jika monster memiliki token yang memungkinkannya untuk menyerang dari timur, maka untuk tujuan menentukan "jalur terpendek" untuk monster itu, perlakukan setiap node jalur yang utara / barat / selatan pemain seolah-olah mereka beberapa node, bukan hanya satu). Ini akan membuat monster terpisah lebih cepat dan mencoba untuk mengapit pemain, bukannya berbaris ke pemain dalam file tunggal dan hanya menyebar pada langkah terakhir.
sumber
Pada dasarnya untuk musuh apa yang ingin Anda lakukan adalah melakukan pathfinding pada level makro (pikirkan tentang menghasilkan area cembung dan pathing ke area di mana pemain berada), dan lakukan beberapa perilaku kemudi gaya boid pada level mikro (setelah Anda dekat ke pemain).
Berikut adalah contoh perilaku boid: http://www.red3d.com/cwr/boids/
Untuk pemain saya pikir torchlight melakukan pathfinding di nav mesh untuk tempat Anda mengklik / drag, dan itu bekerja dengan cukup baik. Ini mungkin terasa sedikit lebih terputus dari kontrol langsung, tetapi itu mengarah pada hasil yang lebih baik bagi pemain.
sumber
ada algoritma bernama rrt yang digunakan untuk masalah pathfinding dunia nyata. permukaan yang bisa dilalui oleh pahlawan Anda (atau musuh) adalah input bersama dengan suface yang dapat dipindahkan oleh objek, dan menggunakan beberapa algoritma optimisasi, ia menemukan jalur ke tujuan Anda. seperti yang saya tahu algoritma ini sangat banyak digunakan di liga robocup. itu cepat, menemukan jalan terpendek dan menghindari tabrakan dan belokan tajam. Anda bisa menggunakan pertunjukan powerpoint ini untuk memahami bagaimana ia menghasilkan path.
sumber
Untuk membuat rute pencarian jalur terlihat lebih "realistis", saya sarankan Anda memeriksa artikel tentang A * yang tampak alami di Game Programming Gems Vol.1
sumber