Langsung saja kita mulai melanjutkan, pada tahap ini kita akan menambahkan script yang gunanya mengatur random Pipe.
Buatlah script GameManager.cs kemudian buka dan tempelkan kode hingga menjadi seperti ini:
using UnityEngine; using System.Collections; using UnityEngine.UI; public class GameManager : MonoBehaviour { //STATIK CLASS SINGLETON public static GameManager m_Instance; //OBJECT PIPE public GameObject m_Pipe; [HideInInspector] public int m_Score; private Text m_TextScore; void Awake() { if (m_Instance == null) m_Instance = this; m_TextScore = GameObject.Find("Score").GetComponent<Text>(); } void Start() { //MENGULANG FUNGSI "CREATEPIPE" SETIAP 1 DETIK InvokeRepeating("CreatePipe", 1f, 1f); } void Update() { m_TextScore.text = m_Score.ToString(); } //FUNGSI GENERATE PIPE void CreatePipe() { Instantiate(m_Pipe , new Vector3(2, transform.position.y,transform.position.z), Quaternion.identity); } //FUNGSI GAMEOVER public void OnGameOver() { //BATALKAN PERULANGAN "CREATEPIPE" CancelInvoke(); } }Setelash itu buat objek pada Hierarchy kemudian beri nama GameManager, atur posisi (0, 0, 0 ) dan tambahkan komponen script GameManager.cs
Setelah itu pada objek GameManager, isikan Pipe dengan objek Pipe yang ada pada folder Prefab, caranya:
Kemudian buatlah Canvas Text, dimana objek ini berfungsi menampilkan score pada game.
Klik Kanan Hierarchy -> UI -> Text kemudian objek Text dirubah namanya menjadi Score, poisiskan Text di tengah atas sceen. Seperti contoh:
Setelah itu coba kalian Play.
Ups..sepertinya terlihat aneh dikarenakan Ground terlihat dibelakang Pipa. Baik, kita coba rubah layer Pipa nya agar terlihat menarik.
Caranya masuk ke folder Prefab, expand Prefab Pipe. Klik Sprite Pack_53 dan Sprite Pack_54 secara bersamaan dengan cara menekan tombol Shift + Mouse Klik. kemudian lihat pada Inspector > Sprite Renderer. Pada Sprite Renderer terdapat properti Order In Layer, rubah 0 menjadi -2
Kemudian tambahkan beberapa kode pada PlayerController.cs tepat dibawah tulisan void Update() {
//JIKA PERTAMA MEMULAI if (isFirstJump) { //SET VELOCITY 0 m_RigidBody.velocity = Vector2.zero; //LOMPAT m_RigidBody.AddForce(m_JumpForce); isFirstJump = false; }Kemudian tambahkan fungsi lagi :
//FUNGSI UNITY UNTUK MENDETEKSI BENTURAN POIN void OnTriggerEnter2D(Collider2D other) { //PENAMBAHAN POIN GameManager.m_Instance.m_Score += 1; }Tambahkan kode ini di atasa tulisan //NONAKTIFKAN CLASS GROUNDMOVE
//MENCARI SEMUA OBJECT YANG MEMPUNYAI CLASS PIPEMOVE foreach (PipePlatform mPipe in GameObject.FindObjectsOfType(typeof(PipePlatform))) { //JALANKAN FUNGSI STOP mPipe.StopMove(); }Sehingga, PlayerController.cs secara keseluruhan akan seperti ini:
using UnityEngine; using System.Collections; using UnityEngine.SceneManagement; 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 PERTAMA MEMULAI if (isFirstJump) { //SET VELOCITY 0 m_RigidBody.velocity = Vector2.zero; //LOMPAT m_RigidBody.AddForce(m_JumpForce); isFirstJump = false; } //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); } } //FUNGSI STOP OBJECT YANG BERGERAK void DisableAllMovePlatform() { //MENCARI SEMUA OBJECT YANG MEMPUNYAI CLASS PIPEMOVE foreach (PipePlatform mPipe in GameObject.FindObjectsOfType(typeof(PipePlatform))) { //JALANKAN FUNGSI STOP mPipe.StopMove(); } //NONAKTIFKAN CLASS GROUNDMOVE (GameObject.FindObjectOfType(typeof(GroundPlatform)) as GroundPlatform).enabled = false; } //FUNGSI DELAY SEBELUM RESTART IEnumerator WaitForRestart() { //PANGGIL FUNGSI DisableAllMovePlatform() DisableAllMovePlatform(); //MENUNGGU SELAMA 1 DETIK yield return new WaitForSeconds(1f); //LOAD ULANG / RESTART GAME SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex); } //FUNGSI JIKA MATI void Die() { StartCoroutine(WaitForRestart()); } //FUNGSI UNITY UNTUK MENDETEKSI BENTURAN TEMBOK void OnCollisionEnter2D(Collision2D other) { //GAMEOVER Die(); } //FUNGSI UNITY UNTUK MENDETEKSI BENTURAN POIN void OnTriggerEnter2D(Collider2D other) { //PENAMBAHAN POIN GameManager.m_Instance.m_Score += 1; } }
0 komentar:
Posting Komentar