Blogging for sharing, sekedar berbagi ilmu dan pengalaman

Membuat Simple AI Untuk Mengkuti Obyek Tertentu di Unity

August 24, 2013 Posted by Ahmad Saifuddin Azhar 26 comments
Dalam sebuah game akan terasa tidak lengkap jika player tidak memiliki lawan. Untuk itu hampir dalam semua game pasti ada suatu karakter yang digerakkan oleh komputer AI yang berfungsi sebagai lawan atau teman. Sebut saja game sederhana pac-man, pasti tidak akan seru atau bahkan belum bisa disebut game jika karakter mirip cumi-cumi yang selalu menjadi lawan pemain dihilangkan. Oleh karena itu keberadaan karakter AI menjadi sangat penting bagi sebagian game.

Gambar game pacman
Gambar game Pacman

Seiring berkembangnya waktu manusia mulai membuat karakter AI yang semakin baik. Dahulu kala karakter AI dari sebuah game mungkin hanya bersifat sangat minim seperti musuh pacman yang hanya bertugas mengikuti lawan. Namun saat ini seiring berjalannya waktu karakter AI seringkali dilengkapi berbagai algoritma tertentu sehingga seakan-akan player merasa kalau lawan mainnya benar-benar bisa berpikir layaknya manusia.

Pada artikel ini saya akan sedikit membahas bagaimana cara membuat sebuah karakter AI yang sangat simpel dan hanya bertugas untuk mengejar obyek yang menjadi target. Tidak ada algoritma tertentu disini bahkan tidak dapat menemukan jalur terdekat untuk mengejar obyek. Algoritma AI ini bisa sobat terapkan untuk membuat game-game shooter sederhana seperti Alien Shooter. Bahkan mungkin bagi sebagian orang hal ini masih belum dapat disebut sebagai AI, namun apalah namanya itu tidaklah penting, yang penting bagaimana sobat bisa memahami bagaimana algoritma membuat obyek yang dapat mengikuti obyek lain secara smooth di unity. Ok langsung saja kita mulai langkah-langkahnya. 

Alat, bahan, dan skill yang diperlukan :
  1. Unity yang sudah terinstall di PC sobat
  2. Kemampuan dasar untuk menggunakan Unity seperti membuat objek, transformasi obyek seperti translate, rotate, dsb. Kalo sobat belum tahu dasar unity mari silahkan mampir ke artikel saya sebelumnya tentang kumpulan link tutorial gamedev. Silahkan belajar dari salah satu link di bagian Unity Basic.
Setelah alat dan bahan terpenuhi saatnya belajar.. Berikut adalah tutorial step by stepnya :

1. Buat karakter
 Pertama buat dulu karakter sesuai selera. Bisa yang simple-simple aja atau import dari model 3D lain. Kalau saya sendiri bikin karakter dari bentuk dasar sederhana, capsule sebagai badan dan cylinder sebagai hidung. Untuk membuat obyek klik Game Object >> Create other >> pilih obyek yang diinginkan. Gambar di bawah adalah karakter milik saya, sedikit aneh sih tapi lumayan daripada nggak.

Buat karakter sederhana

2. Buat arena
Arena diperlukan untuk landasan bagi obyek-obyek dalam game. Arena dapat dibuat menggunakan terrain, namun kali ini saya hanya menggunakan cube biasa yang saya atur ukurannya dan saya beri texture terrain

Buat arena

Selain arena, tentu akan lebih bagus jika diberikan effect cahaya. Tambahkan directional light untuk memberi efek cahaya seperti matahari.

Berikan cahaya directional light

3. Buat script untuk AI
Setelah bentuk karakter dan arena telah siap maka saatnya untuk memberikan script pada karakter. Disini saya buat C# script dengan nama kelas AICharacterBehaviour

Buat script untuk mengikuti object

Adapun isi dari script tersebut adalah sbb :

using UnityEngine;
using System.Collections;

public class AICharacterBehaviour : MonoBehaviour {
    public GameObject target; //target yang dikejar
    public float movingSpeed = 2f; //kecepatan berpindah
    public float turnSpeed = 0.05f; //kecapatan berbelok

    void Update() {
        Vector3 gapPosition = target.transform.position - this.transform.position; //Gap antara posisi AI dengan target
        gapPosition = new Vector3(gapPosition.x, 0, gapPosition.z); //Nilai gap y dibuat 0 agar AI mengabaikan posisi atas dan bawah (Y) dari target dan hanya mengikuti arah ke kanan dan ke kiri (X dan Y)
        Quaternion lookRotation = Quaternion.LookRotation(gapPosition); //Rotasi untuk look atau melihat target
        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
    }
}

setelah script dibuat maka langkah selanjutnya adalah mengimplementasikan script pada karakter. Lakukan drag drop script ke karakter

Lakukan drag & drop

4. Buat karakter target / player yang digerakkan user
Setelah karakter AI jadi maka kita buat target yang dikejar. Target ini nantinya dapat digerakkan oleh user melalui keyboard. Pada tutorial ini karakter target saya buat kubus dan saya beri C# script PlayerBehaviour.

Target berupa kubus

Adapun isi dari scriptnya PlayerBehaviour dalah sbb


using UnityEngine;
using System.Collections;

public class PlayerBehaviour : MonoBehaviour {
    public float movingSpeed = 15; //kecepatan bergerak
 
    void Update () {
        //Jika keyboard di tekan
        if (Input.GetKey(KeyCode.LeftArrow))
            this.transform.Translate(Vector3.left * movingSpeed * Time.deltaTime, Space.World);
        else if(Input.GetKey(KeyCode.RightArrow))
            this.transform.Translate(Vector3.right * movingSpeed * Time.deltaTime, Space.World);
        else if (Input.GetKey(KeyCode.UpArrow))
            this.transform.Translate(Vector3.forward * movingSpeed * Time.deltaTime, Space.World);
        else if (Input.GetKey(KeyCode.DownArrow))
            this.transform.Translate(Vector3.back * movingSpeed * Time.deltaTime, Space.World);
 }
}


Selanjutnya tinggal implementasi kedalam karakter dengan drag & drop

Lakukan drag & drop script

5. Uji coba
Untuk melakukan ujicoba kita pasang dulu target ke dalam script AI agar target dikejar. Tinggal lakukan drag & drop saja

Drag and drop target ke dalam AI

Kemudian terakhir atur kameranya sedemikian rupa agar viewnya nyaman

Jalankan project

Jadi deh... Silahkan di play dan lihat sendiri apa yang terjadi. Untuk menggerakkan player tinggal tekan panah atas bawah kanan dan kiri. Untuk hasil jadinya saya lampirkan di link dibawah. Jika menemui masalah silahkan komen saja.

Mungkin cukup sekian artikel kali ini, mohon maaf jika ada salah kata, semoga bermanfaat dan terus berkarya. ^^

DOWNLOAD PROJECT:  http://www.4shared.com/zip/9Mtzs2vR/Simple_AI.html

BACA JUGA :
Pencarian rute menggunakan algoritma A* dengan library arongranberg


26 comments:

  1. mas kalo cara bikin objek seperti manusia gmn ya caranya
    mohon bantuannya
    email : reijie@yahoo.com

    ReplyDelete
  2. Maaf lama untuk membalas... Sudah lama tidak membuka blog dikarenakan sibuk tugas akhir. Objek manusia atau bentuk-bentuk lain dapat dibuat menggunakan software-software 3D modeling seperti 3ds max, blender, maya, dsb, yang kemudian di import di Unity. Mungkin Anda perlu membaca artikel saya ini http://duniadigit.blogspot.com/2013/12/cara-import-model-3d-blend-ke-unity.html

    ReplyDelete
    Replies
    1. mas mau nanyak kalok mau buat game edukasi menggunakan Al bisa g ya mass
      danangajiss@gmail.com

      Delete
  3. Mas kalau source code php Shortest path A* punya?

    ReplyDelete
  4. saya kan udah buat charakter robot lewat unyti terus di apakan mas?

    ReplyDelete
    Replies
    1. Lho mau diapain emangnya? Di animasikan aja.. Nanti tinggal tambah script ini sudah bisa jalan

      Delete
  5. Replies
    1. Lha ini sudah saya kasi link
      http://adf.ly/4285862/simple-ai-project
      Gak bisa ta?

      Delete
  6. mas supaya karakter yg kita buat tidak tembus ke objek lain itu gmana ya bkin script C# nya?? makasih sbelumnya

    ReplyDelete
    Replies
    1. Di kasih collider aja. Component >> Physycs/Physics2D >> collider yang diinginkan

      Delete
    2. Gan diperkuliahan jg diajarin unity y.klo y jurusan apa ? Thanx

      Delete
  7. mas mau nanya saya kan belajar membuat game jebakan gitu, lha untuk musuhnya biar datangnya acak/random gmn caranya mas?

    ReplyDelete
    Replies
    1. Wah kurang mengerti saya maksudnya. Kalo fungsi random coba dengan Random.Range(minVal, maxVal)

      Delete
  8. mas saya sudah berhasil gerakkan player... tapi AI nya ngejar cuma ke tempat awal player. jadi setelah player saya pindah AI nya tidak mengejar lagi.... solusinya mas ya,,,

    ReplyDelete
  9. mas biar ai nya ngejar player terus caranya gmana?
    saya berhasil gerakkan objek player. sementara objeknya AI ngejar ke tempat awal saja. tidak mengikuti player pas pindah tempat. mohon solusinya mas...?

    ReplyDelete
  10. kk minta petunjuk + alat untuk program + bikin karakter manusia nya

    Email: bayupram1997@gmail.com

    ReplyDelete
  11. Kalo mau banyak target gimana gan ? misalnya dia makan sekumpulan koin dan setelah koin nya habis dia ngejar player nya ?

    ReplyDelete
  12. mas, mau tanya dong cara agar carakter seperti manusia tapi yang di gerakin hanya tangannya aja untuk mengikuti arah kursot ke button bagaimana iya?? mohon bantuannya iya mas. :)

    ReplyDelete
  13. kalo biar keluar di pc bisa gak. maksud saya biar bisa buat ngerjain hal" lain.

    ReplyDelete
  14. mas.. kalau mengembalikan posisi objek seperti semula gimana?

    ReplyDelete
  15. Mas kalau musuh nya di klik, playernya ke lokasi musuh...gmna caranya?

    ReplyDelete
  16. permisi, mas. ini codingnya buat sendiri atau ada referensinya? hehe
    atau mungkin masnya udah nemuin kalo ini sudah ada nama algoritmanya hehhe

    ReplyDelete
  17. min misalnya buat AI yang bisa menangkap suara/menjalankan perintah dengan suara misalnya bukan folder tertentu gimana caranya?

    ReplyDelete
  18. Mas itu yang bahasa indonesia di script nya juga di tulis dalam bahasa indo apa gimana?

    ReplyDelete