Duck Shooter dengan Unity part-10

Halo

Okeh hari ini saya akan melanjutkan tutorial duck-shooter saya yang terakhir :) yaitu memasukan “music” dan “sfx” pada game kita

Pertama yang saya lakukan adalah membuka Main menu screen dan membuat gameobject baru dan diberi nama “music”, kalian bisa mencari music gratis di freesound.org atau bensound.com, dan jangan lupa membaca license yang ada. (license CC 3.0 “dimana kalian harus memberikan credits kepada pembuat musicnya”)

musik-inspectator

Setelah selesai membuat gameobject baru dan memberikan component, yang saya lakukan selanjutnya adalah memberikan script.

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

public class Music : MonoBehaviour {

// Use this for initialization
void Awake () {
DontDestroyOnLoad(this.gameObject); //memerintakan agar game object tidak di hapus pada saat load
if(GlobalVariable.music == null){
GlobalVariable.music = this; //mengisi global variable music dengan object script
}
else{
if(GlobalVariable.music != this){ //memastikan apakah ada object selain object yang sudah di buat, jika iya maka akan di hapus
Destroy (this.gameObject);
}
}
}

public void onoffMusic(){
this.activeMusic = !this.activeMusic;

this.GetComponent <AudioSource> ().mute = !this.activeMusic;
}
}

script diatas adalah satu upaya membuat object hanya 1, sama seperti singleton, tetapi saya menggunakan metode global variable. Kalian juga bisa mencoba memberikan comment pada line 13~15, untuk mengetahui apa yang akan terjadi.

Dan seperti biasa, untuk memastikan object berjalan berjalan sesuai dengan keinginan kita, pastikan untuk melakukan pengetesan.

Jika dirasa saat testing berjalan lancar, selanjut kita juga akan membuat game object baru di Main menu screen dan memberi nama “sfx”, dimana sfx berfungsi sebagai sound effect kita untuk game yang akan kita buat. Tidak jauh berbeda sebetulnya dengan script diatas, tetapi disini akan ada beberapa tambahan untuk memainkan sekali suara tembakan, dan juga suara bebek.

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
28
29
30
31
32
33
34
35
36
37
38
39
using UnityEngine;
using System.Collections;

public class Sfx : MonoBehaviour {

public AudioClip[] sfxSound;
// Use this for initialization
void Awake () {
DontDestroyOnLoad(this.gameObject);
if(GlobalVariable.sfx == null){
GlobalVariable.sfx = this;
}
else{
if(GlobalVariable.sfx != this){
Destroy (this.gameObject);
}
}
}

public void playShot(){
this.GetComponent <AudioSource>().PlayOneShot (sfxSound[2]);
}

public void playQuek(){
int randINT = Random.Range (0, 2);
if(randINT == 0){
this.GetComponent <AudioSource>().PlayOneShot (sfxSound[0]);
}
else{
this.GetComponent <AudioSource>().PlayOneShot (sfxSound[1]);
}
}

public void onOffSound(){
this.activeSound = !this.activeSound;

this.GetComponent <AudioSource> ().mute = !this.activeSound;
}
}

Di script atas saya membuat 2 public function yang akan kita panggil pada saat melakukan tembakan dan pada saat bebek terkena tembakan. Okey disini saya memanggil script diatas di beberapa object ini.

1
2
3
4
5
6
7
8
public class playMainmenu : MonoBehaviour {

void OnMouseDown() {
GlobalVariable.sfx.playShot ();
SceneManager.LoadScene ("game-area"); //kamu tidak bisa menggunakan fungsi ini, sebelum kamu dipanggil pada line 3

}
}
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
public class PeluruUI : MonoBehaviour {
//code yang beberapa di atas tidak saya tulis ulang.

void Update () {
//joka game belum siap maka tidak boleh melakukan tembakan;
if (GlobalVariable.stateMachine != "play")return;

if(Input.GetMouseButtonDown (0)){
Vector2 worldPoint = mainCamera.ScreenToWorldPoint (Input.mousePosition);
RaycastHit2D hit = Physics2D.Raycast (worldPoint, Vector2.zero);
GlobalVariable.amunisi -= 1;


if(hit.collider != null){
if(hit.collider.name == "reload"){
ReloadPeluru ();
}
}
if (GlobalVariable.amunisi < 0)return;
if(GlobalVariable.amunisi<6){
objectPeluru [GlobalVariable.amunisi].GetComponent <SpriteRenderer> ().sprite = spritePeluruKosong;
}

if(GlobalVariable.amunisi >=0)GlobalVariable.sfx.playShot (); // mainkan sound tembakan
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class DuckCollider : MonoBehaviour {
void OnMouseDown(){
//jika belum ready maka bebek tidak boleh di tembak
if (GlobalVariable.stateMachine != "play"){
return;
}


if (GlobalVariable.amunisi < 1)
{
return;
}
killed = true;
GlobalVariable.nilai += 1;
GlobalVariable.sfx.playQuek (); //saya menambahkan script ini
}
}

yup sudah selesai hingga disitu, untuk melakukan panggilan suara dan memainkan musik. Tetapi ada fungsi diatas dari music dan sfx yang belum saya gunakan, dan fungsi itu adalah untuk mematikan sfx dan music kita. Yang nantinya akan memudahkan pemain untuk bisa memilih bermain dengan suara ataupun tidak menggunakan suara (mute).

Seperti yang sudah kalian lihat di awal saya sudah menyiapkan dua tombol untuk mengatur musik dan sfx, dan langsung saja kita membuat script untuk musik terlebih dahulu

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

public class SfxButton : MonoBehaviour {

public Sprite[] onoffSprite;
public GameObject childBtn;
void OnMouseDown(){
GlobalVariable.sfx.onOffSound ();
if(GlobalVariable.sfx.activeSound){
//thi
this.childBtn.GetComponent<SpriteRenderer> ().sprite = onoffSprite [0];
}
else{
this.childBtn.GetComponent<SpriteRenderer> ().sprite = onoffSprite [1];
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using UnityEngine;
using System.Collections;

public class SfxButton : MonoBehaviour {

public Sprite[] onoffSprite;
public GameObject childBtn;
void OnMouseDown(){
GlobalVariable.sfx.onOffSound ();
if(GlobalVariable.sfx.activeSound){
//thi
this.childBtn.GetComponent<SpriteRenderer> ().sprite = onoffSprite [0];
}
else{
this.childBtn.GetComponent<SpriteRenderer> ().sprite = onoffSprite [1];
}
}
}

Jika sudah semua, lakukanlah pengetesan untuk memastikan game berjalan lancar.

okey hari ini saya sudahkan tutorial saya untuk duck shooter. Tetapi kalian masih bisa melakukan “explore” lebih jauh, seperti membuat ending screen, game over screen, ataupun membuat level dalam game ini. Untuk tutorial hari ini saya harapkan kalian bisa mengetahui :

  1. bagaimana caranya melakukan settings sound dan music, supaya tetap berjalan walaupun pindah screen. (DontDestroyOnLoad reffrensi)
  2. bisa melakukan on off screen di main menu (kalian bisa membuatnya juga di screen yang lain)
  3. memanggil fungsi sound untuk sekali jalan dengan fungsi playoneshot.
  4. memanggil fungsi dari script yang berbeda dengan global variable. Yup, selesai sudah tutorial ini. Saya akan mencoba untuk menulis tutorial-tutorial yang lain, dan jika ada pertanyaan atau masukan kalian bisa lakukan di kolom komentar.

Sampai jumpa lagi 😀