Duck Shooter dengan Unity-part3

Halo saya balik lagi dengan Duck Shooter tutorial part 3

Untuk memulainya, kita lakukan hal yang sama dengan tutorial sebelumnya, pertama kita membuat 2D object > sprite dan beri nama “rumput”, setelah itu letakan pada folder prefebs, Lakukan hal yang sama dengan object “air”. Setelah itu kalian bisa menghapus kemua prefebs yang ada di scene jika kalian mau.

Setelah itu kita membuat script untuk melakukan peletakan dan sorting object layer yang dirender. Kita beri nama script ini “Foreground”.

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
40
41
42
43
44
45
46
using UnityEngine;
using System.Collections;

public class Foreground : MonoBehaviour {

public GameObject rumput;
public GameObject rumput2;
public GameObject air1;
public GameObject air2;

// Use this for initialization
void Start () {
for (int j = 0; j < 15; j++) {
Vector3 firstPos = new Vector3 (-8.75f, -1.5f, 0);
firstPos.x = -8.75f + 1.31f*j; // Angka 1.31 saya dapat dari experiment
GameObject bg = null;
if (j % 2 == 0) {
bg = Instantiate (rumput);
} else {
bg = Instantiate (rumput2);
firstPos.y-= .09f;
}
bg.transform.position = firstPos;
bg.transform.parent = this.transform;
bg.GetComponent <SpriteRenderer>().sortingOrder = 1;
}

for (int j = 0; j < 15; j++) {
Vector3 firstPos = new Vector3 (-8.75f, -2.75f, 0);
firstPos.x = -8.75f + 1.31f*j;
GameObject bg = Instantiate (air1);
bg.transform.position = firstPos;
bg.transform.parent = this.transform;
bg.GetComponent <SpriteRenderer>().sortingOrder = 4;
}

for (int j = 0; j < 15; j++) {
Vector3 firstPos = new Vector3 (-8.75f, -4, 0);
firstPos.x = -8.75f + 1.25f*j;
GameObject bg = Instantiate (air2);
bg.transform.position = firstPos;
bg.transform.parent = this.transform;
bg.GetComponent <SpriteRenderer>().sortingOrder = 7;
}
}
}

setelah code selesai buat empty game object dengan nama “foreground”, dan letakan script “Foreground” pada object, jangan lupa pula meletakan prefebs yang sudah kita buat.

foregound-settings

Sekarang coba kita tekan play, dan untuk memastikan kode yang di buat berjalan.

foreground

Jika sudah selesai, sekarang kita buat lagi prefebs yang berisi stik dan bebek.

duckAndChild

Sekarang kita lanjutkan membuat sciprt baru untuk membuat bebek yang banyak. Kita beri mana “Allduck”.

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

public class Allduck : MonoBehaviour {

public GameObject duck;

// Use this for initialization
void Start () {
for(int i = 0; i< 11; i++){
Vector3 firstPos = new Vector3 (-10f, -2.35f, 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 = 2;
}
}
}

Buat empty gameobject baru dan beri nama “all_duck”, jangan lupa kita letakan script “Allduck” kedalamnya, dan masukan prefebs bebek didalam script “Allduck”, dan sekarang kita coba play kembali.

Screen Shot 2016-07-03 at 13.12.54

Setelah kita lihat, hanya gambar stick yang di render, sedangkan bebeknya tidak. Hal ini dikarenakan kita belum mengubah posisi sorting bebek pada posisi yang benar, sehingga bebek di render lebih dulu sebelum rumput.

Oke kita tambahkan code di atas pada line 16.

1
2
3
4
duckArrage.GetComponent <SpriteRenderer>().sortingOrder = 2;//line 16

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

code diatas adalah kita mengambil child pada object “duckArrange”, dan mengubah sorting layernya menjadi 3, sehingga kita membuatnya di render setelah posisi rumput.

Okey hari ini kita sudahkan dulu. Next saya akan membuat bebek-bebek itu berjalan, dan membuatnya randomize dari gambar bebek tersebut. Anyway bisakah kalian melanjutkan pembuatan bebek untuk posisi dibawahnya?

Untuk melihat code yang sudah di buat kalian bisa mendownload unity package saya disini.

See you soon 🙂