Mencari teknik yang baik untuk pergerakan karakter di game hack & slash


51

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:

masukkan deskripsi gambar di sini


Tangkapan layar Torchlight:masukkan deskripsi gambar di sini

---MEMPERBARUI---

Saya ingin tahu bagaimana menghadapi situasi ini:

Situasi 1, saya mengalami gangguan dinamis / statis dalam perjalanan

masukkan deskripsi gambar di sini

Situasi 2, Musuh memiliki jalur sam untuk pemain (masuk ke antrian untuk bertarung dengan kami) masukkan deskripsi gambar di sini


10
+1 untuk diagram dan tangkapan layar (dan pertanyaan yang bagus). Selalu bermanfaat.
Bebek Komunis

Ini adalah pertanyaan yang luar biasa (+1) yang saya harap akan ada banyak diskusi dan saran tentang berbagai cara untuk menghadapi tantangan ini (pengaruh acak untuk mengubah rute, AI, dll.).
Randolf Richardson

1
Saya menemukan praktik yang baik untuk menggunakan sistem penilaian ketika Anda membuat AI. Tergantung pada skor masing-masing musuh (waktu untuk mencapai pemain misalnya), Anda dapat memberi mereka perilaku spesifik. Misalnya jika 8 monster adalah maks yang dapat menyerang pemain, mereka yang memiliki skor lebih tinggi dari delapan pertama secara sadar dapat mencoba menemukan jalur yang lebih panjang ke pemain, membuat mereka terlihat lebih cerdas.
Jonathan Connell

Saya masih mencari jawaban, bagaimana saya bisa mengatasi obstalces (dinamis / statis) di nav mesh? , Saya tidak bisa menggunakan
Recast

Jawaban:


24

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 .


Terima kasih, Anda tahu bagaimana saya bisa membuat navigasi mesh? Atau adakah cara lain untuk membuatnya? Peta saya, dibuat dengan potongan lantai yang mulus (paha depan / segitiga).
piotrek

1
Anda selalu dapat menggunakan Recast ( code.google.com/p/recastnavigation ) untuk menghasilkan mesh navigasi. Anda hanya perlu memberinya "sup segitiga" (sekelompok poligon) dan itu akan menghasilkannya untuk Anda.
Ray Dey

Apakah saya satu-satunya yang menemukan ini, tetapi tautannya: ai-blog.net/archives/000152.html sudah mati. Sebenarnya saya tidak bisa mengakses www.ai-blog.net
123iamking

3

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.


2

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.


Tapi, bagaimana dengan tangga misalnya? Musuh dapat menyerang saya di sana juga, menjadikannya nav mesh lain?
piotrek

Itu harus menjadi bagian dari jaring nav, menjadi bentuk cembung sendiri.
Tetrad

1
Atau Anda dapat terus menggunakan jalur titik ke titik Anda, dan jatuh kembali ke perilaku kemudi berbasis fisika ketika Anda "menutup".
Tetrad

Bagaimana saya bisa menangani obstalces dinamis pada jerat navigasi?
piotrek

1
Berikut adalah posting blog tentang bagaimana recast bekerja pada penanganannya: digestingduck.blogspot.com/2011/03/… .
Tetrad

1

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.


setelah lebih banyak melihat tampaknya presentasi yang saya berikan hanya memberi tahu apa yang dilakukan rrt dan juga menyarankan pendekatan baru, yang diklaim berfungsi lebih baik dalam beberapa kasus, dan ia menyarankan agar algoritma untuk game RTS yang dirintis berharap ini akan membantu Anda.
Ali1S232

0

Untuk membuat rute pencarian jalur terlihat lebih "realistis", saya sarankan Anda memeriksa artikel tentang A * yang tampak alami di Game Programming Gems Vol.1

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.