Sistem Navigasi dalam Unity
Building a NavMesh

Pekerjaan Dalam Sistem Navigasi

Ketika Anda ingin memindahkan karakter secara cerdas dalam permainan Anda (atau agen yang disebut dalam lingkaran AI), Anda harus memecahkan dua masalah: bagaimana untuk reason tentang tingkat untuk menemukan tujuan, maka bagaimana untuk move di sana. Dua masalah ini digabungkan secara ketat, tetapi cukup berbeda dalam alam. Masalah penalaran tentang tingkat lebih global dan statis, dalam hal itu memperhitungkan seluruh sceneAdegan berisi lingkungan dan menu permainan Anda. Pikirkan setiap file Adegan unik sebagai tingkat yang unik. Di setiap Adegan, Anda menempatkan lingkungan, hambatan, dan dekorasi, pada dasarnya merancang dan membangun permainan Anda dalam potongan-potongan. More info
Lihat di Glossary
. Bergerak ke tujuan lebih lokal dan dinamis, hanya mempertimbangkan arah untuk bergerak dan bagaimana mencegah collisionstabrakan terjadi ketika mesin fisika mendeteksi bahwa tabrakan dari dua GameObjects membuat kontak atau tumpang tindih, ketika setidaknya satu memiliki komponen kaku dan bergerak. More info
Lihat di Glossary
dengan agen bergerak lainnya.

Area Berjalan

Sistem navigasi membutuhkan data sendiri untuk mewakili area yang dapat berjalan dalam adegan permainan. Area yang dapat berjalan mendefinisikan tempat-tempat di tempat-tempat di mana agen dapat berdiri dan bergerak. Dalam Unity agen dijelaskan sebagai silinder. Area yang dapat berjalan dibangun secara otomatis dari geometri di tempat kejadian dengan menguji lokasi di mana agen dapat berdiri. Kemudian lokasi terhubung ke permukaan berbaring di atas geometri adegan. Permukaan ini disebut navigasi meshGrafik utama primitif Unity. Mesh membuat sebagian besar dunia 3D Anda. Unity mendukung mesh poligon triangulat atau Quadrangulasi. Nurbs, Nurms, permukaan Subdiv harus dikonversi ke poligon. More info
Lihat di Glossary
(NavMesh untuk pendek).

NavMeshSebuah mesh yang Unity menghasilkan perkiraan daerah dan hambatan yang dapat berjalan di lingkungan Anda untuk mencari jalan dan navigasi yang dikendalikan AI. More info
Lihat di Glossary
menyimpan permukaan ini sebagai poligon cembung. Poligon cekungan adalah representasi yang berguna, karena kita tahu bahwa tidak ada obstruksi antara dua poin di dalam poligon. Selain batas-batas poligon, kami menyimpan informasi tentang poligon mana itu adalah tetangga satu sama lain. Hal ini memungkinkan kita untuk alasan tentang seluruh area yang dapat berjalan.

Mencari Jalan

Untuk menemukan jalan antara dua lokasi di tempat kejadian, kita harus memetakan lokasi awal dan tujuan ke poligon terdekat mereka. Kemudian kita mulai mencari dari lokasi awal, mengunjungi semua tetangga sampai kita mencapai tujuan poligon. Mengumpulkan poligon yang dikunjungi memungkinkan kita untuk menemukan urutan poligon yang akan mengarah dari awal ke tujuan. Algoritme umum untuk menemukan jalan adalah A * (ucapkan "A bintang"), yang adalah apa kegunaan Unity.

Following the Path

Urutan poligon yang menggambarkan jalan dari awal ke tujuan poligon disebut koridor. Agen akan mencapai tujuan dengan selalu kemudi menuju sudut koridor yang terlihat berikutnya. Jika Anda memiliki permainan sederhana di mana hanya satu agen bergerak di tempat kejadian, itu baik untuk menemukan semua sudut koridor dalam satu swoop dan menghidupkan karakter untuk bergerak di sepanjang segmen garis menghubungkan sudut.

Ketika berurusan dengan beberapa agen bergerak pada saat yang sama, mereka harus menyimpang dari jalur asli ketika menghindari satu sama lain. Mencoba untuk memperbaiki penyimpangan seperti menggunakan jalur yang terdiri dari segmen garis segera menjadi sangat sulit dan prone kesalahan.

Karena pergerakan agen dalam setiap bingkai cukup kecil, kita dapat menggunakan konektivitas poligon untuk memperbaiki koridor jika kita perlu mengambil sedikit detour. Kemudian kami dengan cepat menemukan sudut pandang berikutnya untuk mengarahkan ke arah.

Menghindari Kemungkinan

Logika kemudi mengambil posisi sudut berikutnya dan berdasarkan angka yang diinginkan arah dan kecepatan (atau kecepatan) diperlukan untuk mencapai tujuan. Menggunakan kecepatan yang diinginkan untuk memindahkan agen dapat menyebabkan tabrakan dengan agen lain.

Kehindaran obstacle memilih kecepatan baru yang menyeimbangkan antara bergerak ke arah yang diinginkan dan mencegah tabrakan masa depan dengan agen lain dan tepi jala navigasi. Unity menggunakan hambatan kecepatan timbal balik (RVO) untuk memprediksi dan mencegah tabrakan.

Pindahkan Agen

Akhirnya setelah kemudi dan hambatan menghindari kecepatan akhir dihitung. Dalam Unity agen disimulasikan menggunakan model dinamis sederhana, yang juga memperhitungkan akselerasi akun untuk memungkinkan gerakan yang lebih alami dan halus.

Pada tahap ini Anda dapat memberi makan kecepatan dari agen simulasi ke sistem animasi untuk memindahkan karakter menggunakan root motionGerak simpul akar karakter, apakah itu dikendalikan oleh animasi itu sendiri atau eksternal. More info
Lihat di Glossary
, atau membiarkan sistem navigasi mengurus itu.

Setelah agen telah dipindahkan menggunakan metode, lokasi agen simulasi dipindahkan dan dibatasi ke NavMesh. Langkah kecil terakhir ini penting untuk navigasi yang kuat.

Lokal

Salah satu hal yang paling penting untuk memahami tentang navigasi adalah perbedaan antara navigasi global dan lokal.

Navigasi global digunakan untuk menemukan koridor di seluruh dunia. Mencari jalan di seluruh dunia adalah operasi yang mahal yang membutuhkan banyak daya pemrosesan dan memori.

Daftar linear poligon menggambarkan jalan adalah struktur data yang fleksibel untuk kemudi, dan dapat disesuaikan secara lokal sebagai posisi agen bergerak. Navigasi lokal mencoba untuk mengetahui cara bergerak efisien ke sudut berikutnya tanpa bekerja dengan agen lain atau benda bergerak.

Dua Kasus untuk Kemungkinan

Banyak aplikasi navigasi membutuhkan jenis rintangan lain daripada hanya agen lain. Ini bisa menjadi peti dan barel biasa dalam permainan penembak, atau kendaraan. Kendala dapat ditangani menggunakan penghindaran hambatan lokal atau penetapan global.

Ketika hambatan bergerak, yang terbaik ditangani menggunakan hambatan lokal menghindari. Cara ini agen dapat memprediksi menghindari hambatan. Ketika hambatan menjadi stasioner, dan dapat dianggap memblokir jalur semua agen, hambatan harus mempengaruhi navigasi global, yaitu, jaring navigasi.

Mengubah NavMesh disebut ukiran. Proses mendeteksi bagian-bagian rintangan menyentuh lubang NavMesh dan ukiran ke NavMesh. Ini adalah operasi yang mahal, yang belum ada alasan lain yang menarik, mengapa hambatan bergerak harus ditangani menggunakan menghindari tabrakan.

Penghindaran tabrakan lokal dapat sering digunakan untuk mengarahkan kendala yang tersebar secara jarang juga. Karena algoritma lokal, hanya akan mempertimbangkan tabrakan langsung berikutnya, dan tidak dapat mengarahkan sekitar perangkap atau menangani kasus di mana hambatan memblokir jalan. Kasus-kasus ini dapat diselesaikan menggunakan ukiran.

Jelaskan Tautan Off-mesh

Koneksi antara poligon NavMesh dijelaskan menggunakan tautan di dalam sistem jalur. Terkadang perlu membiarkan agen untuk menavigasi di tempat-tempat yang tidak dapat berjalan, misalnya, melompati pagar, atau melintasi pintu tertutup. Kasus-kasus ini perlu mengetahui lokasi aksi.

Tindakan ini dapat dialokasikan menggunakan Link Off-Mesh yang memberi tahu pathfinder yang ada melalui tautan yang ditentukan. Tautan ini kemudian dapat diakses ketika mengikuti jalan, dan tindakan khusus dapat dieksekusi.

Sistem Navigasi dalam Unity
Building a NavMesh