Kamis, 18 Juni 2015

Laporan Project PacMan 3D menggunakan Unity 5.0

PACMAN 3D MENGGUNAKAN UNITY 5.0
Tujuan :
  • Mahasiswa mengerti kiat pembuatan pacman 3D menggunakan Unity 5.0
  • Mahasiswa mampu membuat pacman 3D menggunakan Unity 5.0
Percobaan :
1. Pertama-tama  buat arena bermain dalam Pacman, dalam project ini saya gunakan terrain yang merupakan aset bawaan dari Unity, jangan lupa berikan directional light dan texturing


2. Setelah terrain jadi, saya bake menggunakan unity navigation untuk keperluan AI pathfinding


3. Mulai pembuatan karakter, saya buat karakter Pacman hanya dengan menggunakan asset sphere dari Unity, dan tambahkan material untuk warna karakter. Pada objek karakter diberikan collider dan rigidbody.


4. saya berikan script berikut untuk pergerakan karakter Pacman
public class CharacterControl : MonoBehaviour {
    public int speed = 3;
   
    void Update () {
        transform.Translate ( new Vector3 ((Input.GetAxis ("Horizontal")*speed*Time.deltaTime), 0,
                                           (Input.GetAxis ("Vertical")*speed*Time.deltaTime)));

    }
}
Penjelasan:
  •  int speed dibuat public agar dapat diedit dalam unity
  • translasi menggunakan input axis horizontal dan vertikal agar selain bisa dikontrol dengan keyboard dapat juga dikontrol dengan stick controller

 5. Dilanjutkan dengan pembuatan karakter musuh yang mirip dengan karakter Pacman, dibedakan warna material. Kemudian di duplicate menjadi 4 dan disebar dibanyak tempat pada terrain.

6. Berikut script musuh yang saya tanamkan pada musuh
using UnityEngine;
using System.Collections;

public class AIScript : MonoBehaviour {

    public NavMeshAgent NavComponent; //agent pathfinding
    [SerializeField] Transform target; //tempat tujuan pathfinding
    [SerializeField] int sped = 5; //kecepatan gerak

    // Use this for initialization
    void Start () {
        NavComponent = this.transform.GetComponent<NavMeshAgent> ();
    }
   
    // Update is called once per frame
    void Update () {
        this.transform.eulerAngles = new Vector3 (45, 0);

        if (target) {
            NavComponent.SetDestination (target.position);
            NavComponent.speed = sped;
        } else
            NavComponent.Stop ();
    }

    void OnCollisionEnter(Collision col){
        if (col.transform.name == "Player") {
            Application.LoadLevel("LoseScene");
        }
    }
}
Penjelasan :
  • Pathfinding menggunakan navmesh agent yang telah disediakan oleh unity
  • Jika AI menabrak pemain maka akan kalah dengan ditandai berpindahnya scene ke LoseScene

7. Setelah itu saya buat collectible yang merupakan tujuan kemenangan game, asset berupa cube dan saya beri material berwarna hijau

8. Berikut script  yang ditanamkan dalam object collectible
using UnityEngine;
using System.Collections;

public class Collectable : MonoBehaviour {

    public GameManager GM;

    void Start () {
        GameObject gmobject = GameObject.FindGameObjectWithTag ("MainCamera").gameObject;
        GM = gmobject.GetComponent<GameManager> ();
        GM.scores+=1;
    }
   
    void Update () {
        transform.Rotate (new Vector3 (3, 2));
    }

    void OnTriggerEnter(Collider col){
        if (col.transform.name == "Player") {
            GM.scores--;
            Destroy(this.gameObject);
        }
    }
}
Penjelasan :
  • script GameManager (yang akan dijelaskan di langkah 10) saya letakkan di object Main Camera maka dari itu diperlukan parameter Main Camera pada fungsi start
  • pada Update dibuat rotasi terus menerus agar interaktif dan menarik
  • Jika ditrigger oleh player maka komunikasi dengan GameManager untuk mengurangi jumlah collectible yang harus didapatkan

9. Buat Scene untuk menang dan kalah
10. Buat GameManager untuk mendapatkan informasi sisa collectible yang harus diambil, berikut scriptnya:
 using UnityEngine;
using System.Collections;

public class GameManager : MonoBehaviour {

    public int scores;

    void Update () {
        if (scores == 0) {
            Application.LoadLevel("WinScene");
        }
    }
}
Penjelasan :
  • scores dibuat public agar dapat diakses oleh script lain
  • Update mengecek jika scores telah 0 maka menang dan ditandai dengan berpindah scene ke WinScene
Hasil Percobaan
 


Analisis
  • Unity telah menyediakan AI pathfinding sederhana menggunakan navmesh agent
  • Pathfinding navmesh agent menggunakan navigation yang telah dibake sebelumnya untuk mencari jalan menuju tujuan
  • pathfinding navmesh agent selain diperintahkan untuk mencari jalan menuju tujuan juga dapat diperintahkan untuk berhenti menuju tujuan

Kesimpulan
 Membuat game tidak membutuhkan keahlian yang sangat tinggi, bahkan menggunakan aset dan fitur dasar yang telah ada di unity kita sudah dapat membuat game Pacman 3D sederhana, yang lebih dimudahkan lagi dengan adanya pathfinding menggunakan fitur dari unity yakni navmesh agent.

Tidak ada komentar:

Posting Komentar