Lompat ke konten Lompat ke sidebar Lompat ke footer

Tutorial Pencarian Rute ( Pathfinding ) Dengan Algoritma A* Di Unity Memakai Library Arongranberg


Mungkin teman sudah sanggup menduga, kenapa saya pajang gambar game lawas, pacman, sebagai pembukaan artikel ini. Yaa.. Karena memang tujuan kita di artikel ini ialah menciptakan simple AI yang mempunyai sifat ibarat dengan abjad musuh dalam game pacman, yaitu sanggup mencari jalan untuk mencari objek tertentu kemanapun obyek tersebut bersembunyi.

Artikel ini gotong royong ialah artikel lanjutan dari artikel pembuatan simple AI untuk mengikuti obyek tertentu yang pernah saya tulis sebelumnya disini. Namun bila teman lihat pada artikel sebelumnya yang ada hanyalah abjad mengikuti player hanya dalam ruangan kosong tanpa ada halangan sama sekali. Coba lihat gambar di bawah

 Karena memang tujuan kita di artikel ini ialah menciptakan simple AI yang mempunyai sifat mir Tutorial Pencarian Rute ( Pathfinding ) dengan Algoritma A* di Unity Menggunakan Library Arongranberg

Kemudian pertanyaanya, bagaimana bila arena berupa labirin atau mempunyai penghalang ibarat pada gambar di bawah? Pasti algoritma sederhana ibarat algoritma sebelumnya tidak sanggup menuntaskan ini dan dijamin akan terjadi aneka macam tubrukan.

 Karena memang tujuan kita di artikel ini ialah menciptakan simple AI yang mempunyai sifat mir Tutorial Pencarian Rute ( Pathfinding ) dengan Algoritma A* di Unity Menggunakan Library Arongranberg

Jika arena berbentuk labirin atau mempunyai penghalang maka tentu dibutuhkan suatu algoritma tertentu biar AI yang mengejar tidak membentur tembok. Selain itu, abjad AI seharusnya juga sanggup tetapkan rute mana yang harus ditempuh biar pergerakan semakin realistis dan optimal.

Terdapat aneka macam algoritma pencarian jalur ayng sanggup dipakai, sebut saja djikstra, A*, dsb. Namun pada artikel kali ini kami akan membahas algoritma A*, kenapa A* yang saya pilih sebab di Unity telah tersedia extension arongranberg untuk memudahkan kita dalam menemukan jalur terpendek menggunakan algoritma A*. Adapun bila Sobat ingin tahu apa itu algoritma A* dan bagaimana cara kerjanya silahkan baca artikel saya sebelumnya wacana algoritma A* untuk pencarian jalur terpendek.

Namun pada tutorial kali ini kita tidak terlalu membahas bagaimana cara kerja algoritma A* sebab kita akan menggunakan library arongranberg. Dengan library ini kita cukup memilih dimana saja posisi node dan arongranberg akan mencari sendiri rute terdekat menggunakan algoritma A*. Ok.. Langsung saja kita coba, mari siapkan alat dan bahannya sbb :
  1. Game engine Unity yang sudah terinstall di PC. Adapun Unity sanggup di download disini.
  2. Extension Arongranberg sebagai extension unity untuk mencari jalur terpendek. Versi terbaru arongranberg sanggup di download di situs resminya disini. Namun untuk menghindari perbedaan cara, bila Sobat ingin mendownload versi yang sama dengan tutorial ini (versi 3.2.5.1) maka sanggup di download disini.
  3. Project menciptakan simple AI yang pernah saya buat di tutorial sebelumnya disini. Adapun projectnya sanggup di download disini.
Oke bila alat dan materi sudah siap mari eksklusif saja ita mulai percobaannya. Berikut ialah step by step pembuatan aplikasi ini :

1. Buka project dan import arongranberg
Pertma buka project yang telah Sobat download pada alat & materi di step 3. Buka scene Main Scene pada folder _Scenes. Setelah dibuka maka tampilannya ibarat pada gambar di bawah.

 Karena memang tujuan kita di artikel ini ialah menciptakan simple AI yang mempunyai sifat mir Tutorial Pencarian Rute ( Pathfinding ) dengan Algoritma A* di Unity Menggunakan Library Arongranberg

Selanjutnya import library arongranberg dengan membukanya dan lakukan double klik

 Karena memang tujuan kita di artikel ini ialah menciptakan simple AI yang mempunyai sifat mir Tutorial Pencarian Rute ( Pathfinding ) dengan Algoritma A* di Unity Menggunakan Library Arongranberg
Import semua elemen maka di window project akan ditambahkan

 Karena memang tujuan kita di artikel ini ialah menciptakan simple AI yang mempunyai sifat mir Tutorial Pencarian Rute ( Pathfinding ) dengan Algoritma A* di Unity Menggunakan Library Arongranberg

2. Buat graph
Setelah project dan lib sanggup di import makan langkah selanjutnya dalah menciptakan graph. Ada beberapa jenis graph yang sanggup dibentuk di arongranberg, namun kali ini saya akan membahas yang paling gampang yaitu grid graph. Caranya buat empty game object dengan nama A*. Kemudian drag & drop script AStarPath ke dalam object A*.

 Karena memang tujuan kita di artikel ini ialah menciptakan simple AI yang mempunyai sifat mir Tutorial Pencarian Rute ( Pathfinding ) dengan Algoritma A* di Unity Menggunakan Library Arongranberg

Kemudian buat GridGraph pada object A*

 Karena memang tujuan kita di artikel ini ialah menciptakan simple AI yang mempunyai sifat mir Tutorial Pencarian Rute ( Pathfinding ) dengan Algoritma A* di Unity Menggunakan Library Arongranberg

Selanjutnya lakukan konfigurasi ibarat di bawah

 Karena memang tujuan kita di artikel ini ialah menciptakan simple AI yang mempunyai sifat mir Tutorial Pencarian Rute ( Pathfinding ) dengan Algoritma A* di Unity Menggunakan Library Arongranberg

Nilai-nilai dalam tutorial ini sanggup saja berbeda sesuai dengan luas arena. Silahkan mainkan sendiri ya nilai nilai width, depth, node size, dsb. Lihat-lihat sendiri apa efeknya, yang terang berkaitan dengan ukuran arena, banyaknya node dalam graph, dan letak center dari graph. Tempatkan sempurna di atas arena.Jika sudah diatur klik tekan ibarat pada gambar di bawah 

 Karena memang tujuan kita di artikel ini ialah menciptakan simple AI yang mempunyai sifat mir Tutorial Pencarian Rute ( Pathfinding ) dengan Algoritma A* di Unity Menggunakan Library Arongranberg
Jika sudah di scan maka seharusnya alhasil ialah ibarat pada gambar di bawah

 Karena memang tujuan kita di artikel ini ialah menciptakan simple AI yang mempunyai sifat mir Tutorial Pencarian Rute ( Pathfinding ) dengan Algoritma A* di Unity Menggunakan Library Arongranberg

Kotak-kotak merah pada gambar diatas mengatakan tempat yang tidak sanggup dilewati atau illegal. Jika teman tidak menemukan kotak-kotak merah atau dengan kata lain penghalang tidak sanggup dideteksi maka coba mainkan variabel Erode Iteration dengan memperbesar nilainya. Semakin besar nilai Erode Iteration maka akan memperbesar tempat terlarang. Jika semakin kecil maka penghalang tidak sanggup dideteksi.

 Karena memang tujuan kita di artikel ini ialah menciptakan simple AI yang mempunyai sifat mir Tutorial Pencarian Rute ( Pathfinding ) dengan Algoritma A* di Unity Menggunakan Library Arongranberg
Jika kita tengok lebih bersahabat maka player dan enemy juga akan dideteksi sebagai penghalang. Lihat gambar di bawah 
 Karena memang tujuan kita di artikel ini ialah menciptakan simple AI yang mempunyai sifat mir Tutorial Pencarian Rute ( Pathfinding ) dengan Algoritma A* di Unity Menggunakan Library Arongranberg
Yang perlu kita lakukan ialah membatasi hanya tembok, bangunan dan arena yang dideteksi oleh arongranberg, adapun lainnya tidak. Yang perlu kita lakukan ialah memisahkan tembok dan arena pada layer yang berbeda, misal kita taruh dalam layer "Arena Collider". Lihat gambar di bawah 

 Karena memang tujuan kita di artikel ini ialah menciptakan simple AI yang mempunyai sifat mir Tutorial Pencarian Rute ( Pathfinding ) dengan Algoritma A* di Unity Menggunakan Library Arongranberg

Kemudian pada pecahan Mask pada Collssion testing hanya kita centang pecahan Arena Collider

 Karena memang tujuan kita di artikel ini ialah menciptakan simple AI yang mempunyai sifat mir Tutorial Pencarian Rute ( Pathfinding ) dengan Algoritma A* di Unity Menggunakan Library Arongranberg

Maka alhasil player dan enemy tidak lagi dianggap sebagai penghalang. Lihat gambar di bawah

 Karena memang tujuan kita di artikel ini ialah menciptakan simple AI yang mempunyai sifat mir Tutorial Pencarian Rute ( Pathfinding ) dengan Algoritma A* di Unity Menggunakan Library Arongranberg


3. Buat abjad AI
Untuk menciptakan obyek yang menerapkan pathfinding kita daur ulang obyek pada proyek sebelumnya dengan cara remove script AICharacter pada object AI Character. Sekedar gosip bagi yang belum membaca artikel sebelumnya wacana simple AI. Object AI Character ialah object abjad yang akan mengejar sasaran (player). Di dalam AI Character terdapat script AICharacter untuk mengikuti object. Disini kita tidak membutuhkan script ini sehingga kita perlu me-remove-nya.

 Karena memang tujuan kita di artikel ini ialah menciptakan simple AI yang mempunyai sifat mir Tutorial Pencarian Rute ( Pathfinding ) dengan Algoritma A* di Unity Menggunakan Library Arongranberg

Untuk mencari jalur script yang dibutuhkan ialah Seeker. Kita drag & drop script seeker ke dalam AI Character
 Karena memang tujuan kita di artikel ini ialah menciptakan simple AI yang mempunyai sifat mir Tutorial Pencarian Rute ( Pathfinding ) dengan Algoritma A* di Unity Menggunakan Library Arongranberg

Kita biarkan script seeker (WARNING : Jangan pernah mengedit script Seeker kecuali benar-benar mengerti dan dibutuhkan). Kemudian kita buat script gres dengan nama AIPathFindingCharacterBehaviour. Adapun isi dari AIPathFindingCharacterBehaviour ialah sbb :

 using UnityEngine; using System.Collections; using System.Collections.Generic; using Pathfinding;  public class AIPathfindingCharacterBehaviour : MonoBehaviour {     public GameObject target;     public float movingSpeed = 2f; //kecepatan berpindah     public float turnSpeed = 0.05f; //kecapatan berbelok      private Seeker seeker;   void Start () {         seeker = this.GetComponent();          seeker.pathCallback += OnPathComplete; //Jika pencarian complete maka memanggil method OnPathComplete. Fungsi pencarian cari seeker.StartPath          StartCoroutine(RepeatSearchTarget(0.5f)); //Mencari sasaran setiap 0.5 detik. Semakin cepat repeat rate beban CPU semakin berat, bila terlalu lambat dikala sasaran berpindah tempat jalur tidak berubah  }      private Vector3 processedVectorPath; //Node dari path yang sedang di proses >> berelasi dengan vectorPath  void Update () {         if (Vector3.Distance(this.transform.position, processedVectorPath) < 1) { //Jika mencapai processedVectorPath, maka node yang di proses (processedVectorPath) ialah node berikutnya (vectorPath[0])             if (vectorPath.Count > 0) {                 processedVectorPath = vectorPath[0];                 vectorPath.RemoveAt(0); //me remove vectorpath[0]             }         }          Vector3 gapPosition = processedVectorPath - this.transform.position; //Gap antara posisi AI dengan sasaran         gapPosition = new Vector3(gapPosition.x, 0, gapPosition.z); //Nilai gap y dibentuk 0 biar AI mengabaikan posisi atas dan bawah (Y) dari sasaran dan hanya mengikuti arah ke kanan dan ke kiri (X dan Y)         Quaternion lookRotation = Quaternion.LookRotation(gapPosition); //Rotasi untuk look atau melihat sasaran         this.transform.rotation = Quaternion.Lerp(this.transform.rotation, lookRotation, turnSpeed); //Membuat rotasi berubah secara smooth menggunakan fungsi lerp dari rotasi awal ke rotasi tujuan lookRotasion          this.transform.Translate(Vector3.forward * movingSpeed * Time.deltaTime); //Bergerak maju  }      private List vectorPath = new List(); //berisi kumpulan node dalam path >> node yang sedang di proses dimasukkan processedVectorPath     private IEnumerator RepeatSearchTarget(float repeatRate) {          while (true) {             seeker.StartPath(this.transform.position, target.transform.position); //Mulai mencari path path >> lihat OnPathComplete              yield return new WaitForSeconds(repeatRate);         }     }      private void OnPathComplete(Path path) { //Pencarian selesai         vectorPath = path.vectorPath; //hasil pencarian berupa kumpulan node dari path, ditampung dalam vectorPath         processedVectorPath = vectorPath[0]; //ode yang sedang di proses dimasukkan processedVectorPath          vectorPath.RemoveAt(0); //menghapus node pada vectorPath[0] dikarenakan telah di tampung di processedVectorPath untuk diproses     } } 

Kemudian kita masukkan script AIPathFindingCharacterBehaviourke dalam object AI Character dengan cara drag & drop.

 Karena memang tujuan kita di artikel ini ialah menciptakan simple AI yang mempunyai sifat mir Tutorial Pencarian Rute ( Pathfinding ) dengan Algoritma A* di Unity Menggunakan Library Arongranberg

Selanjutnya kita masukkan Player kedalam variabel sasaran dengan cara drag & drop.

 Karena memang tujuan kita di artikel ini ialah menciptakan simple AI yang mempunyai sifat mir Tutorial Pencarian Rute ( Pathfinding ) dengan Algoritma A* di Unity Menggunakan Library Arongranberg

3. Uji Coba
Selanjutnya tinggal uji coba deh semuanya. Klik tombol play dan jalankan program. Adapun alhasil kurang lebih ialah ibarat pada gambar di bawah. Enemy akan mengejar player tanpa menabrak tembok.

 Karena memang tujuan kita di artikel ini ialah menciptakan simple AI yang mempunyai sifat mir Tutorial Pencarian Rute ( Pathfinding ) dengan Algoritma A* di Unity Menggunakan Library Arongranberg

Sobat sanggup menekan tombol-tombol arrow pada keyboard untuk menggerakkan player.


Mungkin cukup sekian tutorial yang sanggup saya sampaikan, project sanggup Sobat download pada link di simpulan artikel ini. Jangan lupa untuk membaca artikel saya lainnya yaaa... Dan saya harap pengunjung sanggup tinggalkan komen, itung-itung biar rame. Hehehe... Kurang lebihnya saya mohon maaf, terima kasih telah membaca artikel ini tetap semangat dan terus berkarya... ^^

PROJECT : 
http://www.4shared.com/zip/wwYLG27U/Pathfinding_arongranberg.html

Baca juga :
Belajar Algoritma A* Untuk Pencarian Jalur / Rute Terdekat
Extension Unity Sering Digunakan (Menurut Saya)

Sumber http://duniadigit.blogspot.com/