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