Yaps... ini adalah kelanjutan tutorial dari sebelum-sebelumnya.... jika kalian bingung pada tutorial ini, maka sebaiknya kalian lihat tutorial sebelumnya :
"Membuat Game Flappy Bird menggunakan Unity3D Part 1"
"Membuat Game Flappy Bird menggunakan Unity3D Part 2"
"Membuat Game Flappy Bird menggunakan Unity3D Part 2"
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.
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 {
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.
Nah, kita masuk ke bagian yang menyenangkan....
pada fungsi void Update() kita pasangkan script berikut :
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*
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 :
sia can anggeus beul.... emosi aing,,,,
BalasHapuskumplitin boy... kalo gak gw bikin sendiri nih,,, kampret...
Hapus