Bagaimana saya membuat Agen AI bergerak sepanjang kurva?

12

Saat ini kerangka kerja AI saya yang sangat dasar memiliki agen yang bergerak di sepanjang jalur bergerigi yang terdiri dari serangkaian titik.

jalan nav

Mereka melakukan ini hanya dengan memindahkan posisi mereka dari satu titik ke titik berikutnya. Ketika mereka mencapai titik berikutnya mereka bergerak ke depan dan seterusnya. Bagaimana saya bisa mengubah ini sehingga mereka bergerak dengan lancar di sepanjang versi jalur yang melengkung, dan bagaimana cara menghasilkan kurva?

SirYakalot
sumber
bagaimana mereka memilih poin berikutnya?
FxIII
@FxIII maaf saya tidak melihat komentar ini sebelumnya - maksud Anda bagaimana mereka memilih target pencarian baru atau bagaimana mereka memilih titik berikutnya dalam pencarian?
SirYakalot

Jawaban:

4

Anda setelah beberapa jenis jalur smoothing. Tentu saja, seperti yang ditunjukkan bummzack, Anda juga ingin memastikan bahwa jalan apa pun yang Anda lakukan menghasilkan pergerakan hukum untuk agen Anda.

Artikel dari Gamasutra ini menjelaskan hampir semua yang perlu Anda ketahui, termasuk perataan jalur, pergantian legal dan algoritma perputaran yang realistis dan mulus.

Alternatif lain, yang sedikit lebih sederhana, adalah menggunakan perilaku Seek dengan lingkaran kecil / bola untuk memeriksa apakah agen berada di atau dekat dengan titik berikutnya di jalan.

Ray Dey
sumber
7

Karena Anda sudah tahu titik kontrol Anda, Anda hanya perlu memperbarui kode interpolasi Anda untuk menggunakan algoritma untuk kelengkungan (Hermite atau Cosine, misalnya).

Situs-situs ini menawarkan penjelasan dan kode sampel yang bagus yang harus Anda mulai:

Metode Interpolasi Paul Bourke

Sol :: Tutorials - Trik Interpolasi

Doug.McFarlane
sumber
Nah, bagaimana jika kurva yang dihasilkan tiba-tiba menyentuh rintangan?
bummzack
Ini hanya untuk pergerakan agen, per frame. Algo detection collision yang sama masih akan berlaku. Ketika tabrakan terdeteksi, baik mengubah titik kontrol untuk menghindari objek (sulit), atau mulai menggunakan gerakan lain untuk sementara waktu.
Doug.McFarlane
@bummzack itu poin yang bagus, dan jawabannya adalah menggunakan navigasi mesh dan memperlancar kurva Anda sesuai, namun untuk sekarang saya hanya akan mendapatkan ini bekerja dengan grafik nav sederhana dan jadi saya hanya akan menyelesaikan ini dengan hanya menghaluskan jalannya sedikit.
SirYakalot
@bummzack: tambahkan beberapa perilaku kemudi untuk menghindari rintangan di atas algoritma penghasil lintasan melengkung.
imre
0

Saya akan menentang butir di sini dan menyarankan bahwa, alih-alih membuat kurva terlebih dahulu, hanya menanganinya secara frame-by-frame, menggunakan (misalnya) logika yang sama yang Anda gunakan untuk membuat homing -missile .

Ini akan jauh lebih mudah, dan mungkin lebih realistis karena Anda tidak memerlukan kasing khusus ketika ada dinding di antara dua titik - Anda hanya menangani deteksi tabrakan seperti biasa.

Kelemahannya adalah pergerakannya akan terlihat kurang optimal. Objek akan selalu mengambil jalur paling langsung dari satu titik arah ke titik berikutnya, yang berarti, tidak seperti dengan spline, ia tidak akan mulai berputar ke arah titik arah 3 sampai ia telah melewati titik arah 2. Tergantung pada situasi Anda, ini mungkin atau mungkin tidak diperbaiki dengan menyesuaikan titik arah Anda (jika itu bahkan masalah).

BlueRaja - Danny Pflughoeft
sumber
1
Ini pada dasarnya akan menjadi perilaku Carilah yang saya sarankan.
Ray Dey
0

Pencari jalan harus memberi Anda jalan dan Anda tidak boleh mengubahnya. Saya percaya bahwa adalah mungkin untuk memodifikasi algoritma path finder Anda untuk mempertimbangkan bahwa path dengan belokan tajam adalah wrose daripada yang dengan kurva halus seperti yang sudah dilakukan dengan path panjang vs yang pendek.

Saya akan memposting di sini beberapa solusi jika saya dapat menemukan waktu untuk memikirkannya secara mendalam, tetapi saya pikir ini adalah cara untuk pergi.

FxIII
sumber