Membuat Game Flappy Bird menggunakan Unity3D Part 3



Yaps... ini adalah kelanjutan tutorial dari sebelum-sebelumnya.... jika kalian bingung pada tutorial ini, maka sebaiknya kalian lihat tutorial sebelumnya :

Nah, lngsung saja kita mulai tutorial part 3 ini. Pada sesi sebelumnya bahwa kita sudah mengatur beberapa settingan dan komponen. Langkah selanjutnya adalah memberikan script / kode program ke objek Player, script ini wajib agar kita lebih mudah mngatur, memberikan perintah dsb ke objek Player.

Yuk, pertama buat folder terlebih dahulu pada assets folder dan berilah nama Script

KENAPA HARUS MEMBUAT FOLDER?

Ya sebenarnya ini tidak berlaku penuh, cuman metode ini untuk memudahkan kita mengelompokan assets dan agar mudah untuk mencari asset-asset tersebut di dalam project.

Okey, lanjut... klik 2x folder Script kemudian klik kanan > Create > C# Script :
Kemudian beri nama "PlayerController"

  

Masih menggunakan cara pada "Membuat Game Flappy Bird menggunakan Unity3D Part 2" ketika kita akan menyematkan komponen, namun kali ini kita akan menyematkan script "PlayerController.cs" ke objek Player. Caranya pilih terlebih dahulu objek Player di Hierarcy kemudian pada Inspector Add Component > Scripts > PlayerController


Kita mulai tahap peng codingan.. :D.
Klik 2x script PlayerController.cs maka unity akan membuka program Mono Develop jika kalian menggunakan default Script Editor Unity dan akan nampak barisan kode seperti ini:

using UnityEngine;
using System.Collections;

public class PlayerController : MonoBehaviour {


    // Use this for initialization
    void Start () {

    }
 
    // Update is called once per frame
    void Update () {
 
    }
}

Nah ini nantinya akan menjadi script pengontrol objek Player.
Tambahkan kode script ini dibawah kode public class PlayerController : MonoBehaviour {

 //VARIABEL TINGGI LOMPATAN
 public Vector2 m_JumpForce = new Vector2 (0, 150);

 //FILE AUDIO
 public AudioClip m_AudioHit; 
 public AudioClip m_AudioCoin;
 public AudioClip m_AudioSwing;

 //PRIVATE MEMBER
 private Rigidbody2D m_RigidBody;
 private AudioSource m_AudioSource;
 private bool isFirstJump = true;
 private bool isSoundOn = true;

Sehingga PlayerController.cs akan menjadi seprti ini :
 
using UnityEngine;
using System.Collections;

public class PlayerController : MonoBehaviour {

    //VARIABEL TINGGI LOMPATAN
    public Vector2 m_JumpForce = new Vector2(0, 150);

    //FILE AUDIO
    public AudioClip m_AudioHit;
    public AudioClip m_AudioCoin;
    public AudioClip m_AudioSwing;

    //PRIVATE MEMBER
    private Rigidbody2D m_RigidBody;
    private AudioSource m_AudioSource;
    private bool isFirstJump = true;
    private bool isSoundOn = true;

    // Use this for initialization
    void Start () {
 
    }
 
    // Update is called once per frame
    void Update () {
 
    }
}

Kemudian di dalam fungsi void Start() kita tambahkan kode sebagai berikut:

 
        //INISIAL RIGIDBODY
        m_RigidBody = GetComponent<Rigidbody2D>();
        //INISIAL AUDIOSOURCE
        m_AudioSource = GetComponent<AudioSource>();

        //MATIKAN EFEK GRAVITASI
        m_RigidBody.isKinematic = true;
Sehingga keseuluruhan menjadi :
 
using UnityEngine;
using System.Collections;

public class PlayerController : MonoBehaviour {

    //VARIABEL TINGGI LOMPATAN
    public Vector2 m_JumpForce = new Vector2(0, 150);

    //FILE AUDIO
    public AudioClip m_AudioHit;
    public AudioClip m_AudioCoin;
    public AudioClip m_AudioSwing;

    //PRIVATE MEMBER
    private Rigidbody2D m_RigidBody;
    private AudioSource m_AudioSource;
    private bool isFirstJump = true;
    private bool isSoundOn = true;

    // Use this for initialization
    void Start () {
         //INISIAL RIGIDBODY
        m_RigidBody = GetComponent<Rigidbody2D>();
         //INISIAL AUDIOSOURCE
        m_AudioSource = GetComponent<AudioSource>();

        //MATIKAN EFEK GRAVITASI
        m_RigidBody.isKinematic = true;
    }
 
    // Update is called once per frame
    void Update () {
  
    }
}

KOK HARUS VOID START() , KENAPA TIDAK PADA YANG LAIN?

Secara garis besar fungsi tersebut adalah bawaan API Reference Unity, sebenarnya tidak hanya Start dan Update...masih bnyak fungsi baku bawaan unity yang harus kita pakai.

Kenapa harus void Start() ? Sebenarnya selain void Start() ada void Awake(), secara fungsi hampir sama...namun perlu di garis bawahi kalau void Awake() dijalankan sebelum fungsi lain dijalankan. dengan kata lain kalau di urutkan seperti ini Awake() -> Start() -> Update() . Nah, kalau void Update() itu berjalan terus menerus alias looping.

Nah, karena untuk penginisialisasi kompoenen, sebaiknya terletak pada fungsi Awake() atau Start()
Oh iya..sekedar meningatkan bahawa bahasa pemrograman C# ( CSharp) termasuk bahasa yang bersifat OOP, jadi pengkodingan kali ini sangat perlu memperhatikan penulisan huruf besar dan kecil

Lanjuuuut.....

Simpan script yang telah drubah dan ditambhkan...kemudian balik lagi ke Unity Editor. Ketika kalian play mungkin kelihatannya belum ada pengaruh apa-apa. Hehehehe. Yups..karena kita belum memberikan perintah kepada player untuk bergerak jika mouse kiri kita klik.

KETIKA AKAN MELAKUKAN PERUBAHAN / EDITING PADA UNITY EDITOR, WAJIB HUKUMNYA MENSTOP DULU TOMBOL PLAY JIKA KEADAAN UNITY DALAM MODE GAME !!!


Nah, kita masuk ke bagian yang menyenangkan....
pada fungsi void Update() kita pasangkan script berikut :

        //JIKA MOUSE KANAN DI KLIK
        if (Input.GetMouseButtonDown(0))
        {
            m_RigidBody.velocity = Vector2.zero;
            m_RigidBody.AddForce(m_JumpForce);
        }
Sehingga menjadi :
using UnityEngine;
using System.Collections;

public class PlayerController : MonoBehaviour {

    //VARIABEL TINGGI LOMPATAN
    public Vector2 m_JumpForce = new Vector2(0, 150);

    //FILE AUDIO
    public AudioClip m_AudioHit;
    public AudioClip m_AudioCoin;
    public AudioClip m_AudioSwing;

    //PRIVATE MEMBER
    private Rigidbody2D m_RigidBody;
    private AudioSource m_AudioSource;
    private bool isFirstJump = true;
    private bool isSoundOn = true;

    // Use this for initialization
    void Start () {
        //INISIAL RIGIDBODY
        m_RigidBody = GetComponent<Rigidbody2D>();
        //INISIAL AUDIOSOURCE
        m_AudioSource = GetComponent<AudioSource>();

        //MATIKAN EFEK GRAVITASI
        m_RigidBody.isKinematic = true;
    }
 
    // Update is called once per frame
    void Update () {

        //JIKA MOUSE KIRI DI KLIK
        if (Input.GetMouseButtonDown(0))
        {
            m_RigidBody.isKinematic = false;
            m_RigidBody.velocity = Vector2.zero;
            m_RigidBody.AddForce(m_JumpForce);
        }
    }
}

Hasilnya :
 
Coba kalian mainkan di Unity Editor, apa yang terjadi?? Yeaaah...ketika kalian klik mouse nya maka player akan bergerak naik. Namun, sepertinya masih biasa saja...dan masih ada yang kurang... Agar kelihatan lebih menarik coba kita tambahkan kode ini tepat dibawah kode if(Input.GetMouseButtonDown(0)){ } 

* Stop terlebih dahulu jika mode unity masih Game*
      
        //JIKA VELOCITY LEBIH BESAR DARI 0
        if (m_RigidBody.velocity.y > 0)
        {
            float angle = Mathf.Lerp(transform.rotation.z, 90, (-m_RigidBody.velocity.y / 3f) * Time.deltaTime * 25);
            //PUTAR 90 DERAJAT
            transform.rotation = Quaternion.Euler(0, 0, 0);
        } //JIKA TIDAK
        else
        {
            float angle = Mathf.Lerp(0, -90, (-m_RigidBody.velocity.y / 3f) * Time.deltaTime * 25);
            //PUTAR -90 DERAJAT
            transform.rotation = Quaternion.Euler(0, 0, angle);
        }
Sehingga akan tampak full nya seperti ini :
using UnityEngine;
using System.Collections;

public class PlayerController : MonoBehaviour {

    //VARIABEL TINGGI LOMPATAN
    public Vector2 m_JumpForce = new Vector2(0, 150);

    //FILE AUDIO
    public AudioClip m_AudioHit;
    public AudioClip m_AudioCoin;
    public AudioClip m_AudioSwing;

    //PRIVATE MEMBER
    private Rigidbody2D m_RigidBody;
    private AudioSource m_AudioSource;
    private bool isFirstJump = true;
    private bool isSoundOn = true;

    // Use this for initialization
    void Start () {
        //INISIAL RIGIDBODY
        m_RigidBody = GetComponent<Rigidbody2D>();
        //INISIAL AUDIOSOURCE
        m_AudioSource = GetComponent<AudioSource>();

        //MATIKAN EFEK GRAVITASI
        m_RigidBody.isKinematic = true;
    }
 
 // Update is called once per frame
 void Update () {

        //JIKA MOUSE KANAN DI KLIK
        if (Input.GetMouseButtonDown(0))
        {
            m_RigidBody.isKinematic = false;
            m_RigidBody.velocity = Vector2.zero;
            m_RigidBody.AddForce(m_JumpForce);
        }

        //JIKA VELOCITY LEBIH BESAR DARI 0
        if (m_RigidBody.velocity.y > 0)
        {
            float angle = Mathf.Lerp(transform.rotation.z, 90, (-m_RigidBody.velocity.y / 3f) * Time.deltaTime * 25);
            //PUTAR 90 DERAJAT
            transform.rotation = Quaternion.Euler(0, 0, 0);
        } //JIKA TIDAK
        else
        {
            float angle = Mathf.Lerp(0, -90, (-m_RigidBody.velocity.y / 3f) * Time.deltaTime * 25);
            //PUTAR -90 DERAJAT
            transform.rotation = Quaternion.Euler(0, 0, angle);
        }
    }
}

Hasilnya seprti ini :


 Nah, sekian dulu tutorial saya pada kali ini... tunggu totorial selanjutnya ya...


Share on Google Plus

About Unknown

This is a short description in the author block about the author. You edit it by entering text in the "Biographical Info" field in the user admin panel.

2 komentar:

  1. sia can anggeus beul.... emosi aing,,,,

    BalasHapus
    Balasan
    1. kumplitin boy... kalo gak gw bikin sendiri nih,,, kampret...

      Hapus