Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Game Development
  2. Programming
Gamedevelopment

Memahami Steering Behaviors: Path Following

by
Difficulty:IntermediateLength:MediumLanguages:
This post is part of a series called Understanding Steering Behaviors.
Understanding Steering Behaviors: Collision Avoidance
Understanding Steering Behaviors: Leader Following

Indonesian (Bahasa Indonesia) translation by Nurul Fatimah (you can also view the original English article)

Path following adalah masalah yang sering terjadi dalam pengembangan game. Tutorial ini mencakup path following steering behavior, yang memungkinkan karakter untuk mengikuti lintasan yang telah ditentukan yang terbuat dari titik dan garis.

Catatan: Meskipun tutorial ini ditulis menggunakan AS3 dan Flash, Anda harus dapat menggunakan teknik dan konsep yang sama di hampir semua lingkungan pengembangan game. Anda harus memiliki pemahaman dasar tentang vektor matematika.


Pengantar

Path following behavior dapat diimplementasikan dalam beberapa cara. Implementasi Reynolds asli menggunakan jalur yang terbuat dari garis, di mana karakter mengikuti mereka dengan ketat, hampir seperti kereta di atas rel.

Tergantung pada situasinya, ketepatan seperti itu mungkin tidak diperlukan. Karakter dapat bergerak di sepanjang jalur mengikuti garis, tetapi menggunakannya sebagai referensi, bukan sebagai rel.

Implementasi path following behavior dalam tutorial ini adalah penyederhanaan dari yang asli yang diusulkan oleh Reynolds. Masih menghasilkan hasil yang baik, tetapi tidak mengandalkan perhitungan matematika yang berat seperti proyeksi vektor.


Mendefinisikan Jalan

Jalur dapat didefinisikan sebagai satu set titik (node) yang dihubungkan oleh garis. Meskipun kurva juga dapat digunakan untuk menggambarkan jalur, titik dan garis lebih mudah ditangani dan menghasilkan hasil yang hampir sama.

Jika Anda perlu menggunakan kurva, kurva tersebut dapat direduksi menjadi satu set titik yang terhubung:


Kurva dan garis-garis.

Kelas Path akan digunakan untuk menggambarkan rute. Pada dasarnya, kelas memiliki vektor titik dan beberapa metode untuk mengelola daftar itu:

Setiap titik di jalan adalah Vector3D yang mewakili posisi di ruang, dengan cara yang sama properti position karakter bekerja.


Pindah Dari Node ke Node

Untuk menavigasi pemikiran jalan, karakter akan bergerak dari node ke node hingga mencapai akhir rute.

Setiap titik di jalur dapat dilihat sebagai target, sehingga seek behavior dapat digunakan:

Cari satu titik demi satu.

Karakter akan mencari titik saat ini hingga tercapai, maka titik berikutnya di jalur menjadi yang sekarang dan seterusnya. Seperti yang dijelaskan sebelumnya dalam tutorial menghindari tabrakan, kekuatan setiap pencarian dihitung ulang setiap pembaruan game, sehingga transisi dari satu node ke node lainnya menjadi mulus dan lancar.

Kelas karakter akan membutuhkan dua properti tambahan untuk instrumen proses navigasi: simpul saat ini (yang dicari karakter) dan referensi ke jalur yang diikuti. Kelas akan terlihat seperti berikut:

Metode pathFollowing() adalah yang bertanggung jawab untuk menghasilkan kekuatan path berikut. Saat ini tidak menghasilkan kekuatan, tetapi tidak memilih target dengan benar.

path != null nol memeriksa apakah karakter mengikuti jalur apa pun. Jika demikian, properti currentNode digunakan untuk mencari target saat ini (yang harus dicari oleh karakter) dalam daftar poin.

Jika jarak antara target saat ini dan posisi karakter kurang dari 10, itu berarti karakter telah mencapai node saat ini. Jika itu terjadi, currentNode bertambah satu, artinya karakter akan mencari titik berikutnya di jalur. Proses ini diulang sampai jalur kehabisan poin.


Menghitung dan Menambahkan Gaya

Gaya yang digunakan untuk mendorong karakter ke setiap node di jalur adalah gaya pencarian. Metode pathFollowing() sudah memilih node yang sesuai, jadi sekarang perlu mengembalikan gaya yang akan mendorong karakter ke node itu:

Setelah gaya lintasan berikut dihitung, itu harus ditambahkan ke vektor kecepatan karakter seperti biasa:

Jalur yang mengikuti gaya arah sangat mirip dengan pursuit behavior, di mana karakter secara konstan menyesuaikan arahnya untuk menangkap target. Perbedaannya terletak pada bagaimana karakter mencari target tak bergerak, yang diabaikan demi yang lain begitu karakter menjadi terlalu dekat.

Hasilnya adalah sebagai berikut:

Jalur mengikuti dalam aksi. Klik untuk menunjukkan gaya.

Menghaluskan Gerakan

Implementasi saat ini mengharuskan semua karakter untuk "menyentuh" titik saat ini di jalur untuk memilih target berikutnya. Sebagai akibatnya, karakter dapat melakukan pola gerakan yang tidak diinginkan, seperti bergerak dalam lingkaran di sekitar titik sampai tercapai.

Secara alami, setiap gerakan cenderung untuk mematuhi prinsip sedikit usaha. Misalnya, seseorang tidak akan berjalan di tengah koridor sepanjang waktu; jika ada belokan, orang itu akan berjalan dekat ke dinding sambil berputar untuk memperpendek jarak.

Pola itu dapat diciptakan kembali dengan menambahkan jari-jari ke jalan. Jari-jari diterapkan ke titik-titik dan itu dapat dilihat sebagai rute "lebar". Ini akan mengontrol seberapa jauh karakter dapat bergerak dari titik di sepanjang jalan:

Pengaruh radius pada jalur berikut.

Jika jarak antara karakter dan titik kurang dari atau sama dengan jari-jari, titik dianggap tercapai. Sebagai konsekuensinya, semua karakter akan bergerak menggunakan garis dan titik sebagai panduan:

Path following dengan jari-jari. Klik tombol "Gaya" untuk menunjukkan gaya. Klik tombol "+" dan "-" untuk secara dinamis menyesuaikan ukuran jari-jari.

Semakin besar radius, semakin lebar rute dan semakin besar jarak karakter dari titik saat berbelok. Nilai jari-jari dapat diubah untuk menghasilkan pola berikut yang berbeda.


Maju dan Mundur

Terkadang berguna bagi karakter untuk terus bergerak setelah mencapai ujung jalan. Dalam pola patroli, misalnya, karakter harus kembali ke awal rute setelah mencapai akhir, mengikuti titik yang sama.

Ini bisa dicapai dengan menambahkan properti pathDir ke kelas karakter; ini merupakan bilangan bulat yang mengontrol arah di mana karakter bergerak di sepanjang jalan. Jika pathDir adalah 1, itu berarti karakter bergerak menuju akhir jalur; -1 menunjukkan gerakan menuju awal.

Metode Pathfollowing() dapat diubah ke:

Tidak seperti versi yang lebih lama, nilai pathDir sekarang ditambahkan ke properti currentNode (bukan hanya menambahkan 1). Ini memungkinkan karakter untuk memilih titik berikutnya di jalur berdasarkan arah saat ini.

Setelah itu, tes memeriksa apakah karakter telah mencapai akhir rute. Jika itu masalahnya, pathDir dikalikan dengan -1, yang membalikkan nilainya, membuat karakter membalikkan arah gerakan juga.

Hasilnya adalah pola kembali-dan-sebagainya gerakan:

Path following dengan radius dan pola bolak-balik. Klik tombol "Gaya" untuk menunjukkan gaya Klik tombol "+" dan "-" untuk secara dinamis menyesuaikan ukuran jari-jari.

Kesimpulan

Path following behavior memungkinkan karakter apapun untuk bergerak sepanjang jalan yang telah ditetapkan. Rute dipandu oleh titik-titik dan dapat disesuaikan menjadi lebih luas atau lebih sempit, menghasilkan pola gerakan yang terasa lebih alami.

Implementasi yang dicakup dalam tutorial ini adalah penyederhanaan dari path following behavior asli yang diusulkan oleh Reynolds, tetapi masih menghasilkan hasil yang meyakinkan dan menarik.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.