Anda di halaman 1dari 28

2014

MODUL PELATIHAN
UNITY 2D

OLEH

MOHAMMADZIKKY,M.T

POLITEKNIKELEKTRONIKANEGERISURABAYA|Jl.RayaITS,SukoliloSurabaya

A. MEMBUAT PEOJECT BARU

Gambar 1. New project untuk project 2D


Untuk membuat project baru, klik File >> New Project. Kemudian set project untuk project 2D
B. MEMBUAT OBYEK PESAWAT
Palam project 2D sebuah objek game pada umumnya terdiri dari Sprite. Sprite sendiri merupakan
kumpulan beberapa gambar dalam serangkaian frame, sehingga jika gambar tersebut ditampilkan
bergantian maka akan membentuk suatu animasi.

Gambar 2. Contoh sprite membentuk animasi ledakan terdiri dari 4 frame


Sprite dapat diimport ke dalam ke dalam Unity dengan cara melakukan drag and drop.
a. Import pesawat player

Gambar 3. Import sprite pesawat pemain


Gambar berikut menjelaskan tentang import sprite pesawat pemain ke Unity dengan cara drag and
drop.
Setelah di import yang perlu dilakukan adalah membuat animasi, dimana pesawat ini memiliki animasi
1

baling-baling berputar yang terdiri dari 2 frame. Tampilkan window animasi dengan klik window >>
animation. Lakukan drag and drop sprite ke window animation untuk membuat animasi.

Gambar 4. Membuat animasi


Setelah animasi selesai seharusnya ketika di play pesawat dapat menjalankan animasi memutar balingbaling. Tambahkan collider pada pesawat yaitu untuk mendeteksi tumbukan peluru. Klik pesawat >>
Klik menu Component >> Physics 2D >> Polygon Collider 2D sehingga pesawat memiliki collider.

Gambar 5. Pesawat dengan collider


Agar colider dapat bekerja maka dibutuhkan rigidbody2D dengan Klik pesawat >> Klik menu
Component >> Physics 2D >> rigidbody2D. Centang bagian isKinematic untuk menghilangkan efek
gravitasi pada pesawat.

Gambar 6. IsKinematic dicentang untuk menghilangkan efek gravitasi

Membuat ruang peluru dan meluncurkannya ketika tombol ditekan


Untuk membuat peluru yang bisa diluncurkan ketika menekan tombol keyboard, buatlah 3 2 buah object
kosong dan diletakkan sebagai child terhadap objek pesawat (Empty Object). Klik pada object pesawat
player pilih menu GameObject Create Empty child (rename jadi Launcher 1) lakukan lagi
Create Empty child (rename jadi Launcher 2)

Gambar 7. Membuat Tempat meluncurnya peluru dengan Game Object Empty Child

Letakkan Empty object Launcher 1 dan Launcher 2 tadi ke posisi sayap kanan dan sayap kiri pesawat:

Gambar 8. Posisi 2 Objek Empty Child yang sebelumnya dibuat pada gambar lingkaran Merah
Kemudian beri script pesawat sbb :
using UnityEngine;
using System.Collections;
public class Pesawat : MonoBehaviour {
public float speed = 10;
public Transform [] missileLaunchers;
public Peluru missile;
public float attackDelay = 0.5f;
public bool limitMove = true;

private Vector2 minPosition, maxPosition;


private float attackDellayCounter;
void Start(){
minPosition = Camera.main.ScreenToWorldPoint(new Vector2(0, 0));
maxPosition = Camera.main.ScreenToWorldPoint(new
Vector2(Screen.width, Screen.height));
}
void Update(){
attackDellayCounter -= Time.deltaTime;
}

public void MoveUp(){


if(limitMove){
Vector2 newPosition = (Vector2)this.transform.position +
Vector2.up * speed * Time.deltaTime;
if(newPosition.y < maxPosition.y){
this.transform.position = newPosition;
}
}else{
this.transform.Translate(Vector2.up * speed *
Time.deltaTime);
}
}
public void MoveDown(){
if(limitMove){
Vector2 newPosition = (Vector2)this.transform.position Vector2.up * speed * Time.deltaTime;
if(newPosition.y > minPosition.y){
this.transform.position = newPosition;
}
}
}
public void MoveLeft(){
if(limitMove){
Vector2 newPosition = (Vector2)this.transform.position Vector2.right * speed * Time.deltaTime;
if(newPosition.x > minPosition.x){
this.transform.position = newPosition;
}
}
}
public void MoveRight(){
if(limitMove){
Vector2 newPosition = (Vector2)this.transform.position +
Vector2.right * speed * Time.deltaTime;
if(newPosition.x < maxPosition.x){
this.transform.position = newPosition;
}
}
}

public void Attack(){


if(attackDellayCounter <= 0){
foreach(Transform missileLauncher in missileLaunchers){
Instantiate(missile, missileLauncher.position,
missileLauncher.rotation);
}
attackDellayCounter = attackDelay;
}
}
}

Script ini dapat diibaratkan sebagi mesin dari pesawat dimana berfungsi menggerakkan pesawat.
Setelah itu tambahkan script ini ke pasawat untuk mengimplementasikannya pada pesawat.

Gambar 9. Implementasi script pesawat pada obyek pesawat


Set Pesawat (Script) pada sisi Inspector di sisi kanan, speed=6, misslelaunchers (size=2, Element 0 isi
dengan objek launcher 1, dan , Element 2 isi dengan objek launcher 2), kemudian drag objek peluru yang
sudah di prefab ke form Peluru dan sudah di pasang script peluru.cs (jika belum ada, masuk ke menu
Assets CreateC# script ) berikut isinya:
using UnityEngine;
using System.Collections;
public class peluru : MonoBehaviour {
public GameObject explosion; // drag your explosion prefab here
void Update () {
this.transform.Translate (new Vector2 (0, 10) * Time.deltaTime);
if (this.transform.position.y > 20) {
Destroy(this.gameObject);
}
}
}

Lihat gambar berikut:

Gambar 10. Mendifinisikan script pada menu Inspektor


Pada script pesawat diatas dapat diibaratkan sebuah mesin pesawat. Mesin tidak dapat berjalan dengan
5

sendirinya tanpa adanya driver. Untuk itu kita perlu membuat script HUD (Head Up Display) dimana
script HUD ini dapat diibaratkan sebagai dashboard pesawat yang menangani input user, menampilkan
status pesawat atau status game, dsb. Berikut adalah script HUD
using UnityEngine;
using System.Collections;
public class HUD : MonoBehaviour {
public Pesawat pesawat;
void Update(){
if(Input.GetKey(KeyCode.UpArrow)){
pesawat.MoveUp();
}
if(Input.GetKey(KeyCode.DownArrow)){
pesawat.MoveDown();
}
if(Input.GetKey(KeyCode.LeftArrow)){
pesawat.MoveLeft();
}
if(Input.GetKey(KeyCode.RightArrow)){
pesawat.MoveRight();
}
if(Input.GetKey(KeyCode.Z)){
pesawat.Attack();
}
}
}

Buat empty game object untuk mengimplementasikan HUD dan drag and drop script HUD kedalam
game object tersebut.

Gambar 11. Implementasi script HUD


b. Import pesawat musuh
Import pesawat musuh sama dengan import pesawat pemain. Lakukan dengan drag and drop.

Gambar 12. Import pesawat musuh


Buat animasi pesawat enemu seperti langkah untuk membuat pesawat player. Kemudian implementtasikan script pesawat dengan cara drag and drop script ke dalam obyek enemy.

Gambar 13. Implementasi script pesawat


Script pesawat tadi diibaratkan hanya sebuah mesin pesawat. Mesin tidak dapat berjalan tanpa adanya
pengemudi pesawat. Kita buat script Enemy yang mengemudikan pesawat. Adapun isinya adalah sbb :
using UnityEngine;
using System.Collections;
public class Enemy : MonoBehaviour {
private Pesawat pesawat;
void Start(){
pesawat = this.GetComponent<Pesawat>();
pesawat.limitMove = false;
}
void Update(){
pesawat.MoveUp();
if(this.transform.position.y < -20){
Destroy(this.gameObject);
}
}
}

Drag and drop ke dalam pesawat enemy.

Gambar 14. Implementasi script Enemy


MEMBUAT BACKGROUND ARENA PERMAINAN
Arena permainan terdiri dari pulau dan air. Gambar contoh arena permainan dapat dilihat pada gambar
berikut

Gambar 15. Arena permainan dengan background air dan pulau


c. Membuat pulau
Import sprite pulau ke dalam Unity

Gambar 16. Import obyek pulau


Masukkan salah satu obyek pulau ke dalam scene, atur ukurannya, dan tambahkan script 'Island',
8

kemudian jadikan sebuah prefab. Prefab adalah suatu game object yang telah di konfigurasi (misal
konfigurasi ukuran dan posisi, konfigurasi script) dan disimpan menjadi sebuah asset.

Gambar 17. Pulau ditambah script island dan dijadikan prefab


Adapun isi script island adalah sbb :
public class Island : MonoBehaviour {
void Update () {
this.transform.Translate(-Vector2.up * Time.deltaTime);
if(this.transform.position.y < -20){
Destroy(this.gameObject);
}
}
}

Arti dari script tersebut adalah pulau akan digeser sebesar -Vector2.up dimana Vector2.up memberikan
output vector2 (0, 1). Pulau digeser agar seolah-olah pesawat berjalan berlawanan dengan arah
pergerakan pulau.
Fungsi if pada if(this.transform.position.y < -20) artinya adalah ketika pergeseran pulau sudah berada
pada titik y=-20 atau sudah tidak tampak di layar lagi maka pulau akan di destroy untuk meringankan
kerja memori.
d. Membuat air
Untuk membuat air yang perlu dilakukan adalah import object air.

Gambar 18. Import object air dengan cara drag and drop

e. Generate arena
1. Generate pulau
Pulau di generate dengan memunculkan pulau pada selang waktu tertentu pada titik x =
random sepanjang ukuran layar, y = 20 atau di atas layar yang bisa ditampilkan.
2. Generate air
Air di generate dengan melakukan looping. Air di loop segingga sprite air memenuhi layar.

Berikut adalah script untuk melakukan generate air dan pulau saya beri nama 'Arena'.

public class Arena : MonoBehaviour {


public GameObject water;
public Island [] islands;
private float generateIslandDelayCount;
private Vector2 minPosition, maxPosition;
void Start () {
minPosition = Camera.main.ScreenToWorldPoint(new Vector2(0, 0));
maxPosition = Camera.main.ScreenToWorldPoint(new
Vector2(Screen.width, Screen.height));
float waterPosX = minPosition.x, waterPosY = minPosition.y;

SpriteRenderer instWater = (Instantiate(water, new


Vector2(waterPosX, waterPosY), Quaternion.identity) as
GameObject).GetComponent<SpriteRenderer>();
instWater.transform.parent = this.transform;
while(waterPosY - 2 * instWater.sprite.bounds.max.y <
maxPosition.y){
waterPosX = minPosition.x;
while(waterPosX - 2 * instWater.sprite.bounds.max.x <
maxPosition.x){
instWater = (Instantiate(water, new
Vector2(waterPosX, waterPosY), Quaternion.identity) as
GameObject).GetComponent<SpriteRenderer>();
instWater.transform.parent = this.transform;
waterPosX += 2 * instWater.sprite.bounds.max.x;
}
waterPosY += 2 * instWater.sprite.bounds.max.y;
}
}
void Update(){
generateIslandDelayCount -= Time.deltaTime;
if(generateIslandDelayCount <= 0){
Instantiate(islands[Random.Range(0, islands.Length-1)], new
Vector2(Random.Range(minPosition.x, maxPosition.x), 20),
Quaternion.identity);
generateIslandDelayCount = Random.Range(5,15);
}
}
}

Buat sebua game object baru dengan klik Game Object >> Create Empty.

10

Gambar 19. Membuat empty game object


Tambahkan Script arena pada empty game object tersebut.

Gambar 20. Implementasi script arena pada empty game object


Masukkan air dan pulau ke dalam obyek script arena

Gambar 21. Menamba pulau pada arena untuk di generate

11

Tambahkan pula asset air untuk geneerate air

Gambar 22. Memasukkan object water


Dengan begitu seharusnya arena sudah bisa di generate

C. MEMBUAT GERAKAN AI MUSUH SEHINGGA DAPAT MENYERANG


Sebelum memberikan tembakan pada pesawat musuh, terlebih dahulu kita tambahkan collision
pada peluru player dengan mengedit script peluru.cs dan tambahkan script dan diberi tanda
tebal dibawah ini:
using UnityEngine;
using System.Collections;
public class peluru : MonoBehaviour {
public GameObject explosion; // drag your explosion prefab here
void Start ()
{
GameObject gameControllerObject = GameObject.FindWithTag
("GameController");
if (gameControllerObject != null)
{
gameController = gameControllerObject.GetComponent
<GameController>();
}
if (gameController == null)
{
Debug.Log ("Cannot find 'GameController' script");
}
}
void Update () {
this.transform.Translate (new Vector2 (0, 10) * Time.deltaTime);
if (this.transform.position.y > 20) {
Destroy(this.gameObject);
}
}
void OnTriggerEnter2D(Collider2D col)
{
if (col.gameObject.tag == "Enemy") {
GameObject expl = Instantiate(explosion,
transform.position, Quaternion.identity) as GameObject;
Destroy(col.gameObject); // destroy the enemy
Destroy(expl, 3); // delete the explosion after 3 seconds
Destroy(this.gameObject); // destroy this projecttile
}
}

12

Agar permainan menjadi menarik, gerakkan pesawat musuh berlawanan dengan pesawat
player, dari atas kebawah dan berikan tembakan dengan ritme tertentu. Munculkan pesawat
musuh dengan random sebagaimana membuat pulau/island sebelumnya.
1. Membuat Pesawat Musuh dengan tembakannya
-

Buat 2 tempat peluncuran peluru/launcher sebagaimana pembuatan pada pesawat


player sebelumnya. Misalkan 2 empty child object yang dijadikan launcher tersebut
kita peluru1 dan peluru2.

Kemudian edit script Enemy dan tambahkan method LaunchProjectile berikut:

using UnityEngine;
using System.Collections;
public class Enemy : MonoBehaviour {
public float kecepatan;
public Transform[] pelurunya;
public peluruMusuh pel_musuh;
void Start () {
this.transform.Rotate (0,0,180);
InvokeRepeating("LaunchProjectile", 2, 1.5F);
}
// Update is called once per frame
void Update () {
this.transform.Translate (new Vector2 (0, 3) *
Time.deltaTime);
if (this.transform.position.y < -20) {
Destroy(this.gameObject);
}
}
void LaunchProjectile() {
foreach (Transform tembakan in pelurunya) {
Instantiate (pel_musuh, tembakan.position,
tembakan.rotation);
}
if (this.transform.position.y < -20) {
Destroy(this.gameObject);
}
}
}

Masukkan objek peluru, drag&drop ke samping pesawat enemy, berikan script C#


dengan nama peluruMusuh.cs
public class peluruMusuh : MonoBehaviour {

13

// Use this for initialization


public GameObject explosion; //Arahkan ke prefab explosion
di aset bawaan dari unity
void Start () {
this.transform.Rotate (0,0,180);
}
// Update is called once per frame
void Update () {
this.transform.Translate (new Vector2 (0, -6) *
Time.deltaTime);
if (this.transform.position.y < -20) {
Destroy(this.gameObject);
}
}
void OnTriggerEnter2D(Collider2D colPlayer)
{
if (colPlayer.gameObject.tag == "Player") {
GameObject expl = Instantiate(explosion,
transform.position, Quaternion.identity) as GameObject;
Destroy(expl, 3); // delete the explosion after
3 seconds
}
}
}

Kemudian jadikan prefab pesawat enemy dan peluru tersebut. Untuk pesawat
enemy, geret sampai 3x, rename tambahannya menjadi pesawat enemy2 dan
pesawat enemy 3, kemudian ganti warnanya agar bervariasi.

Tambahkan rigidbody 2D (isKinematic dicentang) dan polygon collider 2D (is


triggered dicentang) baik pada pesawat enemy ataupun pelurunya

14

Kemudian delete objek yang ada di scene dan kembali klik aset prefab Pesawat
Enemy yang ada dibwah/ folder aset, dan setting Inspector-nya seperti halnya pada
pesawat player (kecepatan= -3, size peluru=2, isi elemen 0=men-drag prefab
Pesawat Enemy 1 dan elemen 2= men-drag prefab Pesawat Enemy 2, serta drag
peluru yg sudah diprefab ke form pel_musuh )

Agar pesawat enemy bisa muncul random seperti halnya pulau, update Script
Arena.cs menjadi seperti berikut (yang dicetak bold adalah tambahannya):
using UnityEngine;
using System.Collections;
public class Arena : MonoBehaviour {
public GameObject water;
public Island[] islands;
public musuh[] pesawatMusuh;
private float generateIslandDelayCount;
private float generateEnemyDelayCount;
private Vector2 minPosition, maxPosition;
// Use this for initialization
void Start () {
minPosition = Camera.main.ScreenToWorldPoint(new
Vector2(0,0));
maxPosition = Camera.main.ScreenToWorldPoint(new
Vector2(Screen.width, Screen.height));
float waterPosX = minPosition.x, waterPosY =
minPosition.y;
SpriteRenderer instWater = (Instantiate(water, new
Vector2(waterPosX, waterPosY), Quaternion.identity) as
GameObject).GetComponent<SpriteRenderer>();

15

instWater.transform.parent = this.transform;
while(waterPosY - 2 * instWater.sprite.bounds.max.y <
maxPosition.y){
waterPosX = minPosition.x;
while(waterPosX - 2 *
instWater.sprite.bounds.max.x < maxPosition.x){
instWater = (Instantiate(water, new
Vector2(waterPosX, waterPosY), Quaternion.identity) as
GameObject).GetComponent<SpriteRenderer>();
instWater.transform.parent =
this.transform;
waterPosX += 2 *
instWater.sprite.bounds.max.x;
}
waterPosY += 2 * instWater.sprite.bounds.max.y;
}
}
// Update is called once per frame
void Update () {
generateIslandDelayCount -= Time.deltaTime;
if(generateIslandDelayCount <= 0){
Instantiate(islands[Random.Range(0,
islands.Length-1)],
new
Vector2(Random.Range(minPosition.x, maxPosition.x), 20),
Quaternion.identity);
generateIslandDelayCount = Random.Range(5,15);
}
generateEnemyDelayCount -= Time.deltaTime;
if(generateEnemyDelayCount <= 0){
Instantiate(pesawatMusuh[Random.Range(0,
pesawatMusuh.Length-1)],
new
Vector2(Random.Range(minPosition.x, maxPosition.x), 20),
Quaternion.identity);
generateEnemyDelayCount = Random.Range(3,10);
}
}
}

2. Membuat Efek Ledakan


-

Sebelum men-setting efek ledakan, pertama yang harus dilakukan adalah menandai
(tag) aset-aset yang ada ke dalam kelompok Enemy dan Player. Klik objek Pesawat
Player dan Peluru ke dalam Player serta Pesawat Enemy dan Peluru_musuh ke tag
Enemy (Add Tag Tuliskan Enemy)

16

Kemudian kita ambil efek ledakan explosion dari standart asset yang sudah ada di
unity, caranya dengan mengklik menu Asset Import Package Particles

Lalu kita menuju Script Peluru.cs dan tambahkan didalam script tersebut
sebagaimana berikut (kode ditambahan sebagaimana baris yang ditebalkan)
Arahkan explosion di Inspektor ke objek prefab explosion

Agar peluru musuh yang mengenai pesawat player juga menimbulkan efek ledakan,
pasangkan juga pada objek prefab peluru_Musuh dan update script
peluruMusuh.cs sebagaimana cara mengupdate script peluru.cs

using UnityEngine;
using System.Collections;
public class peluruMusuh : MonoBehaviour {
public GameObject explosion; // drag your explosion prefab here
void Update () {
this.transform.Translate (new Vector2 (0, 10) *
Time.deltaTime);
if (this.transform.position.y > 20) {
Destroy(this.gameObject);
}
}
void OnTriggerEnter2D(Collider2D col)
{
if (col.gameObject.tag == "Player") {
GameObject expl = Instantiate(explosion,
transform.position, Quaternion.identity) as GameObject;
Destroy(col.gameObject); // destroy the enemy
Destroy(expl, 3); // delete the explosion after 3
seconds
Destroy(this.gameObject); // destroy this projecttile
}
}
}

17

D. MEMBUAT UI (User Interface)


a. GUITexture
GUITexture menampilkan gambar tertentu pada layar. Disini GUITexture digunakan untuk
menampilkan gambar berupa tulisan 'Your Score'. Langkah pertama adalah import texture

Gambar 23. import texture Score


Select texture kemudian klik Game Object >> create other >> GUITexture. Set setting
seperti pada gambar di bawah

Gambar 24. Setting GUITexture


b. GUIText
GUIText memiliki fungsi yang mirip dengan GUITexture. Jika GUITexture menampilkan obyek
gambar maka GUIText menampilkan obyek text. Klik Game Object >> Create Other >> GUIText

18

Gambar 25. Setting GUIText

E. MENGATUR SCORE DAN HEALTH POINT


Untuk memberikan skor pada setiap tembakan player yang mengenai pesawat musuh ataupun
pengurangan health point (poin sisa hidup) pada setiap pesawat player yang terkena tembakan
lawan, maka perlu dibuatkan 1 game objek kosong dengan nama Game Controller, Arahkan
Tag nya kepada game Controller juga, kemudian masukkan script GameController.cs pada
objek kosong tersebut. Tuliskan script GameController.cs sebagaimana berikut ini:
// Use this for initialization
public GUIText scoreText;
public GUIText HPtext;
private int score;
private int healthPoint;
void Start ()
{
score = 0;
healthPoint = 3;
UpdateScore_HP ();
}
// Update is called once per frame
void Update () {
}
public void AddScore (int newScoreValue)
{
score += newScoreValue;
UpdateScore_HP ();
}
public void MinHP (int newHealthPoint)
{
healthPoint -= newHealthPoint;
UpdateScore_HP ();
}
void UpdateScore_HP ()
{
scoreText.text = score.ToString();
HPtext.text = "HP:"+ healthPoint.ToString();

19

if (healthPoint <= 0) {
Destroy(GameObject.FindWithTag ("Player"));
}
}
}

Kemudian arahkan deklarasi GUIText scoreText ke objek GUItext yang telah dibuat
sebelumnya (rename objek GUI Text menjadi Score Text). Dan Buat objek GUIText lagi,
rename dengan nama HP_Text. Kemudian arahkan deklarasi GUIText HPtext ke objek
HP_Text tersebut.

Gambar 22. Setting Score dan Health Point


Agar Objek GameController tersebut bisa dijalankan dan dipicu (trigger) kemudian
memberikan tambahan score saat peluru player mengenai pesawat musuh, maka buka kembali
script peluru.cs dan tambahkan script yang ditebalkan berikut:
using UnityEngine;
using System.Collections;
public class peluru : MonoBehaviour {
public int scoreValue=10;
private GameController gameController;
public GameObject explosion; // drag your explosion prefab here
void Start ()
{
GameObject gameControllerObject = GameObject.FindWithTag
("GameController");
if (gameControllerObject != null)
{
gameController = gameControllerObject.GetComponent
<GameController>();
}
if (gameController == null)
{
Debug.Log ("Cannot find 'GameController' script");
}
}
void Update () {
this.transform.Translate (new Vector2 (0, 10) *
Time.deltaTime);
if (this.transform.position.y > 20) {
Destroy(this.gameObject);
}
}
void OnTriggerEnter2D(Collider2D col)

20

{
if (col.gameObject.tag == "Enemy") {
GameObject expl = Instantiate(explosion,
transform.position, Quaternion.identity) as GameObject;
Destroy(col.gameObject); // destroy the enemy
Destroy(expl, 3); // delete the explosion after 3
seconds
Destroy(this.gameObject); // destroy this projecttile
gameController.AddScore (scoreValue); //updating
score
}
}
}

Begitupun dengan Health Point, agar bisa berfungsi dan mengurangi poin HP setiap player
terkena tembakan musuh, maka, tambahkan pada peluruMusuh.cs sebagai berikut:
public int HP_MinusValue=1;
private GameController gameController;
public GameObject explosion;
void Start () {
this.transform.Rotate (0,0,180);
GameObject gameControllerObject = GameObject.FindWithTag
("GameController");
if (gameControllerObject != null)
{
gameController = gameControllerObject.GetComponent
<GameController>();
}
if (gameController == null)
{
Debug.Log ("Cannot find 'GameController' script");
}
}
// Update is called once per frame
void Update () {
this.transform.Translate (new Vector2 (0, -6) *
Time.deltaTime);
if (this.transform.position.y < -20) {
Destroy(this.gameObject);
}
}
void OnTriggerEnter2D(Collider2D colPlayer)
{
if (colPlayer.gameObject.tag == "Player") {
gameController.MinHP (HP_MinusValue); //updating
score
GameObject expl = Instantiate(explosion,
transform.position, Quaternion.identity) as GameObject;
Destroy(expl, 3); // delete the explosion after 3
seconds
}
}

Score value adalah kelipatan nilai yang akan diberikan pada setiap memperoleh score, dan
HP_Minus value adalah pengurangan Health point saat Player terkena tembakan dan jika
21

HP=0, maka Game Over

Gambar 23. Kondisi Interface Objek Peluru dan Peluru Musuh


F. MEMBERIKAN CONTROL PAUSE
Untuk menambahkan kontrol PAUSE pada Game ini, maka kita akan tambahkan tombol Spasi
sebagai tombol untuk menekan Pause dan kita tampilkan dengan GUIBox. Oleh karena itu kita
tambahkan pada script HUD sebagai input kontrolnya, serta output aksinya pada script
pesawat.cs
-

Yang ditambahkan pada Script di HUD


if(Input.GetKey(KeyCode.Space)){
Pesawat.GamePaused();
}

Yang ditambahkan pada Script pesawat

public bool paused;


.
.
.
public void GamePaused() {
if (Time.timeScale == 1) {
Time.timeScale = 0;
OnApplicationPause(true);
}else {
Time.timeScale = 1;
OnApplicationPause(false);
}
}
void OnGUI() {
if (paused) {
GUI.Box (new Rect (Screen.width / 2 50,Screen.height / 2 - 50,250,40), "GAME PAUSED");
}
}
void OnApplicationPause(bool pauseStatus) {
paused = pauseStatus;
}

22

Gambar 24. Hasil Game yang di PAUSE dengan menekan Spasi

G. DAN TULISAN GAME OVER JIKA HEALTH POINT SUDAH HABIS


Untuk mengeluarkan Tulisan Game Over menggunakan GUI Texture, terlebih dahulu, import
asset Game Over.png ke aset. Kemudian tambahkan script pada GameController.cs
sebagaimana tulisan tebal berikut:
using UnityEngine;
using System.Collections;
public class GameController : MonoBehaviour {
// Use this for initialization
public GUIText scoreText;
public GUIText HPtext;
public Texture2D textureGame;
public bool gameOver=false;
private int score;
private int healthPoint;
void Start ()
{
score = 0;
healthPoint = 3;
UpdateScore_HP ();
}
// Update is called once per frame
void Update () {
}
public void AddScore (int newScoreValue)
{
score += newScoreValue;
UpdateScore_HP ();
}
public void MinHP (int newHealthPoint)
{
healthPoint -= newHealthPoint;
UpdateScore_HP ();
}

void UpdateScore_HP ()
{
scoreText.text = score.ToString();

23

HPtext.text = "HP:"+ healthPoint.ToString();


if (healthPoint <= 0) {
Destroy(GameObject.FindWithTag ("Player"));
gameOver=true;
}
}
void OnGUI(){
if(gameOver==true){
GUI.Label (new Rect ((Screen.width / 2) - 50,
(Screen.height / 2) - 50, textureGame.width, textureGame.height),
textureGame);
Time.timeScale = 0;
}
}
}

Arahkan deklarasi Texture2D textureGame ke gambar Geme Over.png berikut

Gambar 24. Gambar Game Over


Jangan lupa File Save scene (Ctrl+S) agar project pada scene game tersimpan dengan baik.

H. MEMBERI TAMBAHAN SCENE DI AWAL UNTUK USER INTERFACE


Untuk menambahkan User Interface (UI) di awal game, buat Scene baru dengan CTRL+N (File
New Scene) simpan di folder Scene dan beri nama UI

Gambar 25. Membuat Scene Baru

Siapkan 3 texture yang akan dijadikan tombol Mulai ,Kredit dan Keluar.

Gambar 26. Contoh texture yang akan dijadikan tombol User Interface di game awal

Masukkan/drag texture tersebut ke dalam Assets kemudian masuk ke Scene dan masukkan
GUI txture dengan masuk ke menu Game Object Create Other GUI texture (lakukan
sampai 3 kali), rename masing-masing objek GUI texture tersebut menjadi mulai, kredit
dan keluar. Kemudian sorot kolom texturenya dan sesuaikan ke masing-masing UI diatas.

24

Gambar 27. Mensorot GUI Texture


Sesuaikan posisinya sehingga berjejer vertical dengan menggeser Position X dan Y pada bagian
Transform. Untuk melihat hasilnya, klik pada Tab GAME (pada Tab Scene, gambar tidak akan
nampak).
Buat Script c# dengan nama mulai.cs untuk GUI texture Mulai sebagaimana berikut:
using UnityEngine;
using System.Collections;
public class mulai: MonoBehaviour {
void OnMouseDown() {
Application.LoadLevel ("scene1");
}
}

Lalu buatkan juga Script c# keluar.cs untuk GUI texture Keluar sebagaimana berikut:
using UnityEngine;
using System.Collections;
public class keluar : MonoBehaviour {
// Use this for initialization
void OnMouseDown() {
Application.Quit();
}
}

Kemudian untuk memberikan keindahan kursor mouse, tambahkan aset kursor.png ( ) dan
tambahkan script untuk kursor di salah satu script yang dibuat tadi, bia dipasang pada mulai.cs
atau keluar.cs. Contoh diletakkan di script mulai.cs, tambahkan script dengan yang dicetak
tebal berikut:
using UnityEngine;
using System.Collections;
public class mulai: MonoBehaviour {
public Texture2D cursorImage;
public Texture2D ButtomMulai;
private int cursorWidth = 32;
private int cursorHeight = 32;
void Start()
{
Screen.showCursor = false;

25

}
void OnMouseDown() {
Application.LoadLevel ("scene1");
}
void OnGUI()
{
GUI.DrawTexture(new Rect(Input.mousePosition.x,
Screen.height - Input.mousePosition.y, cursorWidth, cursorHeight),
cursorImage);
}
}

Untuk Menu Kredit, buat scene baru bernama kredit, kemudian isi dengan keterangan
pembuat game. Untuk membuat Link di menu UI ke scene Kredit, lakukan hal yang sama
sebagaimana script mulai, buat script c# pada menu kredit yaitu:

using UnityEngine;
using System.Collections;
public class kredit: MonoBehaviour {
void OnMouseDown() {
Application.LoadLevel ("kredit");
}
}

I. MENGATUR DAN MENJALANKAN SCENE


Agar Scene dapat berjalan dan terhubung dengan baik, pastikan scene yang pertama muncul
adalah scene UI. Oleh karena itu, atur dengan cara Klik di menu File Build setting
(CTRL+Shift+B). Drag semua scene yang digunakan dalam rangkaian game tersebut. Dan
yang terpenting sekali lagi bahwa Scene UI harus pada bagian paling atas, karena ketika game
tersebut di publish, maka yang akan keluar adalah scene pada urutan teratas (0).

26

J. BUILD PROJECT
Untuk melakukan build project klik File >> Build and Run.
Untuk project android unity harus diintegrasikan dengan android sdk klik edit >> preference >>
pada bagian external tools klik tentukan android SDK Location.

27