Duck Shooter dengan Unity-part5

Halo, halo 🙂

Balik lagi untuk melanjutkan game Duckshooter kita, kali ini kita akan membuat semua bebek bisa ditembak(di clik dengan mouse), dan membuat bebek berputar saat ditembak.

Pertama yang saya lakukan agar bebek bisa ditembak adalah memberikan collider kepada object bebek tersebut, dan membuat script tambahan agar bisa membaca mouse kita saat di klik.

tambahkan-collider

Sesudah memasukan collider saya membuat script baru dengan “DuckCollider”, dan memasukan nya kedalam prefebs “bebek” child dari “bebekObject”.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
using UnityEngine;
using System.Collections;

public class DuckCollider : MonoBehaviour {
public Sprite backImageDuck;

void Update(){

}

void OnMouseDown(){
this.GetComponent <SpriteRenderer>().sprite = backImageDuck;
}
}

yup sekarang setiap bebek yang di klik dan terkena tembakan kita langsung ubah spritenya (jangan lupa memasukan spritenya terlebih dahulu, jika lupa check kembali tutorial ini), dan sekarang supaya lebih menarik, kita buat setiap bebek yang kita tembak akan berputar, dan berubah spritenya. Kita ubah code bebeknya menjadi code di bawah.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using UnityEngine;
using System.Collections;

public class DuckCollider : MonoBehaviour {

public Sprite backImageDuck;
private bool killed = false;

void Update(){
if(this.killed && this.transform.localScale.x > -1){//melakakukan pengechekan apakah bebek sudah tertembak & scaling sudah menjadi -1, jika belum maka lakukan proses dibawah
Vector3 newScaling = this.transform.localScale;
newScaling.x -= 5 * Time.deltaTime;
this.transform.localScale = newScaling;
if(newScaling.x <= 0 && this.GetComponent <SpriteRenderer>().sprite != backImageDuck){//cek apakah sudah di ganti gambarnya
this.GetComponent <SpriteRenderer>().sprite = backImageDuck;// dipindahkan posisi sebelumnya ada di onmouse down
}
}
}
void OnMouseDown(){
killed = true; //membuat boolean agar mengetahui bahwa sudah bebek sudah tertembak
//this.GetComponent <SpriteRenderer>().sprite = backImageDuck; (pindah ke update);
}
}

Sekarang kita coba testing game kita seperti biasa untuk memastikan tidak ada kesalah script yang di buat. Jika setiap bebek yang tertembak akan berputar berarti kita telah berhasil 😀

Owh iya apakah kalian berhasil membuat bebek bergerak dengan posisi berbeda arah? jika belum tambahkan script pada “AllDuck.cs”.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
for(int i = 0; i< 11; i++){
Vector3 firstPos = new Vector3 (-10f, -3.55f, 0);
firstPos.x = -10 + 2*i; // Angka 1.31 saya dapat dari experiment
GameObject duckArrage = Instantiate (duck);
duckArrage.transform.position = firstPos;
duckArrage.transform.parent = this.transform;
duckArrage.GetComponent <SpriteRenderer>().sortingOrder = 4;

Transform childDuck = duckArrage.transform.GetChild (0);
childDuck.GetComponent<SpriteRenderer>().sortingOrder = 5;

//tambahkan script 2 line dibawah ini
duckArrage.transform.localScale = new Vector3 (-1, 1, 1); // saya ubah scale bebek tersebut menjadi -1 kebalik
duckArrage.GetComponent <DuckBehaviour>().flip = true; // saya akan bahas di DuckBehaviour.cs
}

jangan lupa ubah juga “DuckBehaviour”, menjadi seperti ini.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using UnityEngine;
using System.Collections;

public class DuckBehaviour : MonoBehaviour {

public Sprite[] gambarBebek;
public GameObject childObject;
public bool flip = false;

// Use this for initialization
void Start () {
int rand = Random.Range (0, gambarBebek.Length);
childObject.GetComponent <SpriteRenderer>().sprite = gambarBebek[rand];
}

// Update is called once per frame
void Update () {
if(this.flip){ // jika flip maka jalankan line dibawah, tetapi jika tidak maka jalankan yang satunya line 26 kebawah
Vector3 moveDuck = this.transform.position; // buat holder variable untuk posisi perpindahan bebek
moveDuck.x -= 1 * Time.deltaTime; // setiap 1 detik object akan berkurang kesisi X sebesar 1 point
if(this.transform.position.x < -10){// jika posisi bebek sudah di ujung kiri kita akan membuatnya kembali ke posisi kekanan
moveDuck.x = -12;
}
this.transform.position = moveDuck;
}
}
}

Okey sudah selesai untuk saat ini. Saya harap kalian bisa script di atas bisa mengetahui :

  1. cara membuat collider pada bebek dan membuat script agar bebek bisa di klik (refrensi OnMouseDown)
  2. membuat bebek tersebut berputar dan dengan cara mengatur scale pada bebek
  3. mengetahui apakah bebek tersebut sudah di tembak apa belum? dengan memberikan variable bool pada bebek

Sebelum saya tutup seperti biasa saya ingin meberikan quest kembali, apakah kalian bisa membuat bebek yang tertembak akan kembali seperti semula, saat melewati ujung dari screen? kalian harus mengubah sprite seperti semula ataupun menrandomnya dengan yang baru dan mengembalikan posisi bebek (tidak terbalik). Jika kalian sudah berhasil kalian bisa memberikan script pada kolom comment 🙂

Next part adalah membuat nilai, menampilkan angka dan melakukan reload peluru. Sampai jumpa pada tutorial berikutnya. Owh iya kalian bisa mendownload duckshooter “unitypackage” part-5 saya disini.

Cheers 😀