Behavior: Pathfinding menggunakan A * Pathfinding Algorithm (A star) untuk secara efisien menemukan jalan terdekat di sekitar rintangan (Obstacle). Ini bisa menunjukkan jalur (Path) sebagai daftar titik simpul (Node) melalui Expression, atau secara otomatis memindahkan Object di sepanjang jalur (Path) yang ditentukan.
Sebagai contoh bagaimana cara kerja dan penggunaan Pathfinding, Cari Pathfinding di dialog Start.
Pathfinding Grid
Behavior: Pathfinding bekerja berdasarkan pembagian Layout ke dalam kotak-kotak (Grid). Karena Pathfinding dengan metode Pixel-perfect bisa sangat lambat untuk diproses, membagi Layout ke dalam beberapa sel (Cell) merupakan Pathfinding yang sangat efisien.
Ukuran Cell bisa diatur dari Property, dan semakin besar, maka Pathfinding lebih efisien. Namun pengaturan ukuran Cell yang besar dapat menyebabkan masalah: Cell hanya bisa menjadi halangan (Obstacle) atau malah sepenuhnya bebas, dan menggunakan Cell ukuran besar dapat menutup celah kecil.
Sebagai contoh: susun hambatan (Obstacle) berikut dengan menggunakan Property: Cell size = 32:
Tampak bahwa Object akan bisa bebas bergerak di antara beberapa Object ini. Namun jika sel-sel yang menandai Behavior: Pathfinding sebagai rintangan disorot dengan warna merah, kita akan melihat ini:
Beberapa celah (Gaps) telah ditutup karena ukuran Cell yang relatif besar dibandingkan dengan ukuran celah. Ini akan membuat jalan rute Behavior: Pathfinding sepenuhnya berada di sekitar rintangan, dan tidak dapat melewati celah tersebut. hal ini dapat dibantu perbaiki ini dengan mengurangi Cell size menjadi 20:
Sekarang kita dapat melihat bahwa Behavior: Pathfinding akan dapat menemukan rute di antara celah hambatan-hambatan ini. Namun, ukuran Cell yang lebih kecil akan membuat Pathfinding lebih intensif dalam penggunaan CPU. Umumnya, coba gunakan ukuran Cell terbesar tapi yang tidak menimbulkan masalah saat menavigasi rintangan.
Property: Cell border dapat menyesuaikan bagaimana Cell ditandai sebagai hambatan (Obstacle). Jika Cell border lebih besar dari 0, maka sel yang dekat dengan rintangan (Obstacle) namun sebenarnya tidak menyentuh, juga bisa ditandai sebagai rintangan, maka secara efektif akan memberi tambahan Obstacle border. Jika Cell border negatif, Cell yang hanya sekedar menyentuh rintangan tidak akan ditandai sebagai penghalang, sehingga secara efektif mengecilkan area rintangan. Gambar di bawah menunjukkan efek dari nilai Cell border yang berbeda bila menggunakan Cells size = 20.
Untuk efisiensi terbaik, gunakan nilai Cell size dan Cell border yang sama untuk semua Object yang menggunakan Behavior: Pathfinding dalam Layout. Jika Object yang berbeda menggunakan nilai yang berbeda, maka Behavior: Pathfinding harus menghasilkan Multiple Obstacle Grid di memori, dan melakukan Pathfind masing-masing Object secara terpisah. Anda juga harus menghindari Pathfinding setiap Tick, karena ini akan menyebabkan penggunaan CPU sangat tinggi dan juga meningkatkan jumlah waktu yang dibutuhkan Object lain untuk menentukan jalurnya (Path).
Kotak-kotak (Grid) rintangan (Obstacle) hanya ditentukan sekali pada saat Startup. Jika Object berpindah dalam Layout, Grid dari Pathfinding tidak diperbarui, dan Object akan terus menemukan jalur seperti pada saat Object berada di posisi lama mereka. Untuk memperbarui Grid rintangan, gunakan Action: Regenerate Obstacle map, tapi perhatikan ini adalah operasi yang sangat ‘CPU-intens’ dan hanya boleh dilakukan pada sesekali kesempatan.
Catatan: Semua Cell di luar area Layout dianggap adalah sebuah rintangan (Obstacle). Area di luar Layout tidak dapat disertakan dalam Grid penjelajahan (Pathfinding), karena hal itu memerlukan jumlah memori yang tak terbatas.
Finding Paths (Menemukan jalur)
‘Finding Paths’ bisa memakan waktu lama, apalagi jika ukuran selnya kecil. Untuk mencegah hal ini mengurangi Framerate dari game, jalur dihitung secara Background (menggunakan Web Worker). Ini berarti setelah menggunakan Action: Find Path, jalur yang dihasilkan tidak segera tersedia. Anda harus menunggu Trigger Condition: On Path found untuk mulai berjalan. Hanya dengan cara itu Anda bisa memindahkan Object di sepanjang jalur, atau mengakses daftar simpul (Node) dari Behavior Expression. Game dapat terus berjalan selama sepersekian detik antara Action: Find Path dan Condition: On Path found.
Jalur hasil (Result Path) adalah urutan titik-titik simpul (Nodes) di sepanjang Grid. Gambar di bawah menunjukkan jalur 4 titik simpul (Node 0 sampai 3).
Titik-titik simpul (Node) tersebut dapat diambil (hanya setelah Condition: On Path found) menggunakan Expression: NodeCount dan NodeXAt / NodeYAt. Sebagai alternatif, Action: Move along Path dapat digunakan untuk memindahkan Object secara otomatis di melalui titik-titik simpul (Node) tersebut, dengan menggunakan kecepatan (Speed), percepatan (Acceleration) dan laju rotasi (Rotation Rate) yang ditetapkan dari Property pada Behavior: Pathfinding.
Catatan: Tidak mungkin menemukan jalur, seperti mencoba menavigasi ke tujuan di dalam lingkaran rintangan yang tertutup. Dalam kasus ini, Condition: On failed to find Path akan terpicu (Triggered), bukan Condition: On Path found.
Jika Anda meminta Behavior: Pathfinding untuk menempuh jalur ke tujuan di dalam kepungan rintangan / area yang tertutup oleh rintangan (Inside the Obstacle), Pathfinding akan menemukan Cell yang bisa dilalui dan melakukan Pathfind ke sana.
Pathfinding Properties
- Cell size
Ukuran sel, dalam pixel, dari Grid hambatan (Obstacle). Lihat di atas untuk rincian lebih lanjut tentang bagaimana ini digunakan. - Cell border
Jumlahnya, dalam pixel, untuk memperluas ukuran sel saat menguji rintangan (Obstacle). Lihat di atas untuk rincian lebih lanjut tentang bagaimana ini digunakan. - Obstacles
Jika Solids, Behavior secara otomatis akan menandai sel yang menyentuh Object yang memiliki Behavior: Solid sebagai penghalang. Jika Custom, Anda harus menentukan Object mana yang menjadi hambatan dengan menggunakan Action: Add Obstacle pada saat Startup. - Max speed
Jika Action: Move along Path digunakan, kecepatan maksimum dalam pixel per detik Object untuk berjalan. - Acceleration
Jika Action: Move along Path digunakan, maka laju percepatan pixel per detik per detik. - Deceleration
Jika Action: Move along Path digunakan, laju perlambatan dalam pixel per detik per detik, digunakan saat mendekati Node terakhir. - Rotate speed
Jika Action: Move along Path digunakan, kecepatan Object berputar dalam derajat per detik. Perhatikan, hal ini dapat mempengaruhi kecepatan Object jika kecepatan putaran rendah, Object harus melambat pada tikungan tajam. - Rotate Object
Untuk mengatur apakah Object akan otomatis berputar menurut sudut gerak (Angle of Motion). - Diagonals
Untuk mengatur apakah jalur perjalanan di sepanjang diagonal diperbolehkan. Jika Disabled, titik-titik simpul (Node) yang dihasilkan di sepanjang jalur hanya akan berubah pada sudut 90 derajat (atas, kanan, bawah dan kiri). Jika Enabled, Node yang dihasilkan dapat melalui sepanjang diagonal. - Initial state
Apakah Behavior awalnya diaktifkan atau dinonaktifkan. Jika Disabled, ini dapat diaktifkan saat Runtime menggunakan Action: Set enabled.
Pathfinding Conditions
- Compare speed
Saat bergerak di sepanjang jalan (Moving Along Path), bandingkan kecepatan Object saat ini dalam pixel per detik. - Diagonals are enabled
TRUE jika Property: Diagonals = Enabled: bergerak secara diagonal di sepanjang sel. Ini juga bisa diubah dengan Action: Set diagonals enabled. - Is calculating Path
TRUE jika Object saat ini sedang menghitung jalan (Secara Background). Ini juga TRUE antara Action: Find Path dan Triggered Condition: On Path found atau On failed to find Path. - Is cell Obstacle
Untuk menguji jika sel di Grid rintangan ditandai sebagai rintangan. Ini berguna untuk Debugging atau menampilkan Obstacle Grid. Perhatikan: posisi yang diambil adalah koordinat dari Cell, bukan koordinat pada Layout. - Is moving along Path
TRUE jika sedang menggunakan Action: Moving along Path sampai Triggered Condition: On arrived. - On arrived
Dipicu (Triggered) setelah Action: Move along Path, saat Object akhirnya sampai di tempat tujuan. - On failed to find Path
Dipicu (Triggered) setelah Action: Find Path, jika tidak ada jalur yang bisa ditemukan ke tujuan, seperti: saat dikelilingi/dikepung oleh rintangan. - On Path found
Dipicu (Triggered) setelah Action: Find Path, begitu jalur telah berhasil ditemukan ke tempat tujuan. Titik-titik simpul (Nodes) sekarang tersedia untuk Expression: NodeCount, NodeXAt dan NodeYAt, dan Action: Move along Path juga dapat digunakan.
Pathfinding Actions
- Add Obstacle
Jika Property: Obstacles adalah Custom, ini digunakan untuk menambahkan Object yang akan ditandai sebagai penghalang (Obstacle) di Grid penjelajahan. Jika ini dilakukan pada selama game berjalan (setelah Condition: Start of Layout), Anda juga harus menggunakan Action: Regenerate Obstacle map setelah Action ini agar bisa berfungsi. - Add Path cost
Tambahkan Object untuk meningkatkan beban jalur di Grid Pathfinding. Ini dapat digunakan untuk mensimulasikan medan kasar (Rough Terrain) – Behavior akan mencoba menemukan jalan lain di sekitarnya jika memungkinkan, kecuali jika rute itu adalah jalan pintas utama. Lihat Contoh: Pathfinding Path cost pada dialog Start untuk demo. Jika ini dilakukan selama game berjalan (setelah Condition: Start of Layout), Anda juga harus menggunakan Action: Regenerate Obstacle map setelah Action ini agar bisa berfungsi. - Clear cost
Hapus semua Object yang ditambahkan dengan Action: Add Path cost. Anda juga harus menggunakan Action: Regenerate Obstacle map setalah Action ini agar bisa berfungsi. - Clear Obstacles
Hapus semua Object yang ditambahkan dengan Action: Add Obstacle. Anda juga harus menggunakan Action: Regenerate Obstacle map setalah Action ini agar bisa berfungsi. - Find Path
Mulai menghitung jalur ke tujuan di Layout. Ini diproses secara Background dan hasilnya tidak siap dengan segera setelah Action ini; Anda harus menunggu sampai Triggered Condition: On Path found atau On failed to find Path berjalan, sebelum hasilnya diketahui atau jalurnya bisa dilalui. Jika Action ini digunakan sementara penghitungan jalur sudah TRUE, jalur lama masih dihitung dan hasilnya yang akan terpicu (Triggered), baru kemudian segera mulai menghitung jalur baru, lalu akan memicu hasil dari Action: Find Path tersebut. - Regenerate Obstacle map
Untuk menentukan apakah setiap sel di Grid rintangan menjadi rintangan kembali (pembaruan). Ini adalah Action yang menggunakan CPU secara intensif dan tidak boleh digunakan secara sering. Setiap perubahan yang dilakukan dengan menggunakan Action: Add Obstacle, Clear Obstacles, Add Path cost dan Clear cost akan berfungsi jika kemudian setelahnya Action ini dilakukan. - Set enabled
Untuk menetapkan apakah Behavior diaktifkan atau dinonaktifkan. Jika Disabled, tidak akan menghitung jalur atau memindahkan Object. - Move along Path
Secara otomatis mulai menggerakkan Object di sepanjang jalur yang ditemukan. Ini hanya bisa digunakan setelah Condition: On Path found – Condition yang menangkap Trigger dari Action: Find Path. - Set speed
Atur kecepatan saat Object ketika bergerak di sepanjang jalurnya, dalam pixel per detik. Ini tidak bisa negatif atau lebih besar dari Property: Max speed dari Behavior ini. - Stop
Jika Object sedang bergerak di sepanjang jalurnya, ini akan menyebabkannya berhenti. - Set Acceleration
- Set Deceleration
- Set diagonals enabled
- Set max speed
- Set rotate speed
Untuk menetapkan Property Behavior tersebut. Lihat definisi masing-masing Property ini di atas untuk informasi lebih lanjut.
Pathfinding Expressions
- CurrentNode
Saat Object bergerak di sepanjang jalur, indeks Node (yang berbasis nol) saat ini bergerak ke tujuan. Ini mungkin akan terlewati sebelum Object benar-benar mencapai simpul (Node) berikutnya, untuk membantu putarannya. - MovingAngle
Sudut gerak (Angle of Motion) saat berjalan di sepanjang jalur, dalam derajat. - NodeCount
Jumlah Node di jalur yang ditemukan. Ini hanya diperbarui setelah Condition: On Path found. - NodeXAt
- NodeYAt
Untuk mengambil nilai posisi simpul (Node) di jalur yang ditemukan, dalam koordinat pada Layout, dengan menggunakan indeks Node berbasis nol. Ini hanya tersedia setelah Condition: On Path found. - Speed
Kecepatan saat ini, dalam pixel per detik, saat bergerak di sepanjang jalur. - Acceleration
- CellSize
- Deceleration
- MaxSpeed
- RotateSpeed
Untuk mengambil nilai Property tersebut. Untuk informasi lebih lanjut, lihat definisi dari masing-masing Property di atas.





Komentar
Posting Komentar