Anda di halaman 1dari 51

Laporan Praktikum Pemrograman Game

Oleh
Bagus Slamet Oetomo (3.34.17.1.07)
Kelas IK-3B

PROGRAM STUDI TEKNIK INFORMATIKA


JURUSAN TEKNIK ELEKTRO
POLITEKNIK NEGERI SEMARANG
2019
I. Tujuan Instruksional Khusus
Setelah melekukan praktikum ini Mahasiswa mampu memahami dan
menerapkan konsep dasar game.
II. Dasar Teori
A. Basic Scripting

Secara default, pada script yang baru ini akan tampil 2 buah prosedur, yaitu:

Start()
Prosedur ini akan dipanggil satu kali di awal, pada saat script pertama kali
di-enable. Prosedur ini sesuai untuk inisialisasi.

Update()
Prosedur ini dipanggil pada setiap frame, apabila script di-enable. Prosedur
ini sesuai untuk bagian script yang dieksekusi berulang-ulang.

Untuk daftar prosedur dan fungsi lengkap yang ada pada kelas
MonoBehaviour, silakan merujuk ke tautan ini: https://docs.unity3d.com/
ScriptReference/MonoBehaviour.html.

Langkah Menjalankan Script

Langkah-langkah untuk menjalankan script yang kita buat adalah sebagai


berikut:

1. Drag and drop script Latihan1.cs ke GameObject Main Camera di


jendela Hierarchy.
2. Kliktombol Play pada Toolbar.

3. Setelah Anda klik info tersebut, akan muncul di jendela Console seperti
berikut:

Jika Anda klik salah satu list yang terdapat di console, akan muncul info
detail dari informasi nama berkas (file) script sampai baris kode tersebut. Anda
dapat menghilangkan info tersebut dengan klik tombol Clear.

4. Untuk mematikan Play Mode, klik lagi ikon Play.

5. Anda dapat menyimpannya dengan klik menu File > Save atau tekan
Ctrl+S. Kemudian beri nama Main.
B. MonoBehaviour

MonoBehaviour adalah class dasar dari setiap script Unity yang dibuat.
Ketika Anda menggunakan C#, MonoBehaviour secara otomatis (default) akan
tercipta.

Berikut ini kotak centang untuk mengaktifkan (enable) atau menonaktifkan


(disable) MonoBehaviour (script) pada Unity Editor. Letaknya ada pada tab
Inspector.

Fungsi MonoBehaviour untuk menonaktifkan script ketika di tidak di


centang. Jika fungsi-fungsi tersebut dinonaktifkan, maka tidak akan terjadi
apa-apa pada log Console. Berikut ini fungsi-fungsi yang akan dibahas pada
modul ini:

1. Awake() dan Start()


2. Update(), FixedUpdate(), dan LateUpdate()

Di bawah ini adalah diagram ilustrasi untuk pengurutan dan pengulangan


fungsi selama script dijalankan.
Awake

Awake digunakan untuk menginisialisasi variabel pada saat status game


belum dimulai. Awake dipanggil ketika script sedang dijalankan dan setelah
semua objek di inisialisasi, sehingga Anda dapat memanggil objek lain.

Contoh kode dari fungsi Awake:


. using System.Collections;
. using System.Collections.Generic;
. using UnityEngine;
.
. public class LatihanAwake : MonoBehaviour {
. void Awake() {

. Debug.Log("Awake Dipanggil");
. }
. }

Pembahasan kode:

. using System.Collections;
. using System.Collections.Generic;
. using UnityEngine;

3 baris kode di atas adalah Library bawaan saat script dibuat. Kita dapat
memberi Library tambahan seperti scene, UI dan lainnya.

. public class LatihanAwake: MonoBehaviour

Nama kelas dari script. Nama kelas harus sama dengan berkas (file) script yang
dibuat.

. void Awake()

Fungsi ini akan dipanggil selama script dijalankan.

. Debug.Log("Awake Dipanggil");

Akan terpanggil setelah fungsi Awake() dijalankan.

Start

Start dipanggil ketika script diaktifkan tepat sebelum fungsi Update


dipanggil pertama kali. Seperti fungsi Awake, Start dipanggil tepat saat script
dalam keadaan aktif. Namun, Awake dipanggil ketika objek script di inisialisasi,
terlepas dari apakah script diaktifkan atau tidak.
Contoh kode dari fungsi Start:

. using System.Collections;
. using System.Collections.Generic;
. using UnityEngine;
.
. public class LatihanStart : MonoBehaviour {
. void Start() {
. Debug.Log("Start Dipanggil");
. }
. }

Pembahasan kode:

. using System.Collections;
. using System.Collections.Generic;
. using UnityEngine;

3 baris kode di atas adalah Library bawaan saat script dibuat. Kita dapat
memberi Library tambahan seperti scene, UI dan lainnya.

. public class LatihanStart : MonoBehaviour

Nama kelas dari script. Nama kelas harus sama dengan berkas script yang dibuat.

. void Start()

Fungsi ini akan dipanggil saat script diaktifkan dan dijalankan.

. Debug.Log("Start Dipanggil");

Akan terpanggil setelah fungsi Start() dijalankan.

Update

Update akan aktif jika MonoBehaviour diaktifkan. Update akan terpanggil


sesudah Start dipanggil. Update adalah fungsi yang paling sering digunakan
untuk menerapkan script game. Namun, tidak semua MonoBehaviour
membutuhkan script Update. Biasanya kita membuat method baru untuk
mendeklarasikan sebuah fungsi.
Contoh kode dari fungsi Update:

. using System.Collections;
. using System.Collections.Generic;
. using UnityEngine;

.
. public class LatihanUpdate : MonoBehaviour {
. void Update() {
. Debug.Log("Waktu untuk Update :" + Time.deltaTime);
. }
. }

Pembahasan kode:

. using System.Collections;
. using System.Collections.Generic;
. using UnityEngine;

3 baris kode di atas adalah Library bawaan saat script dibuat. Kita dapat
memberi Library tambahan seperti scene, UI dan lainnya.

. public class LatihanUpdate : MonoBehaviour

Nama kelas dari script. Nama kelas harus sama dengan berkas script yang dibuat.

. void Update()

Fungsi ini akan dipanggil saat script diaktifkan dan dijalankan setelah Start().

. Debug.Log("Waktu untuk Update :" + Time.deltaTime);

Dijalankan saat fungsi Update() dijalankan dan akan menampilkan waktu yang
sama.

FixedUpdate

FixedUpdate biasanya digunakan sebagai gantinya Update ketika bertemu


dengan Rigidbody. Misalnya saat menambahkan physic ke suatu objek.

Contoh kode dari fungsi FixedUpdate:


. using System.Collections;
. using System.Collections.Generic;
. using UnityEngine;
.
. public class LatihanFixedUpdate : MonoBehaviour {
. void FixedUpdate() {

. Debug.Log("Waktu untuk FixedUpdate :" + Time.deltaTime);


. }
. }

Pembahasan kode:

. using System.Collections;
. using System.Collections.Generic;
. using UnityEngine;

3 baris kode di atas adalah Library bawaan saat script dibuat. Kita dapat
memberi Library tambahan seperti scene, UI dan lainnya.

. public class LatihanFixedUpdate : MonoBehaviour

Nama kelas dari script. Nama kelas harus sama dengan berkas script yang dibuat.

. void FixedUpdate()

Fungsi ini akan dipanggil saat script diaktifkan dan dijalankan setelah Update().

. Debug.Log("Waktu untuk FixedUpdate :" + Time.deltaTime);

Dijalankan saat fungsi FixedUpdate() dijalankan dan akan menampilkan waktu


berbeda.

LateUpdate

LateUpdate dipanggil setelah semua fungsi Update dipanggil. Ia berguna


untuk memberi log console eksekusi script. Contohnya, Camera Follow harus
selalu diimplementasikan di LateUpdate karena melacak objek yang mungkin
telah bergerak di dalam Update.
Contoh kode dari fungsi LateUpdate:

. using System.Collections;
. using System.Collections.Generic;
. using UnityEngine;
.
. public class LatihanLateUpdate : MonoBehaviour {
. void LateUpdate() {
. Debug.Log("Waktu untuk LateUpdate :" + Time.deltaTime);
. }
. }

Pembahasan kode:

. using System.Collections;
. using System.Collections.Generic;
. using UnityEngine;

3 baris kode di atas adalah Library bawaan saat script dibuat. Kita dapat
memberi Library tambahan seperti scene, UI dan lainnya.

. public class LatihanLateUpdate : MonoBehaviour

Nama kelas dari script. Nama kelas harus sama dengan berkas script yang
dibuat.

. void LateUpdate()

Fungsi ini akan dipanggil saat script diaktifkan dan dijalankan setelah Update()
dan FixedUpdate().

. Debug.Log("Waktu untuk LateUpdate :" + Time.deltaTime);

Dijalankan saat fungsi LateUpdate() dijalankan dan akan menampilkan waktu


berbeda.
C. Mengatur Editor Script

Secara default Unity menggunakan MonoDevelop sebagai Editor Script.


Namun, jika Anda menginginkan editor yang lebih sophisticated/terdepan, Anda
dapat menggunakan Visual Studio Code. Untuk pilihan editor yang ringan dan
lebih sederhana dapat menggunakan Notepad++. Pemilihan tersebut tergantung
kenyamanan Anda dalam menulis kode dan spesifikasi komputer yang Anda
miliki.

Untuk mengganti editor script, Anda dapat lakukan langkah-langkah sebagai


berikut:

1. Klik Menu Edit > Preferences…


2. Pada jendela Preferences, buka tab External Tools. Kemudian pada External
Script Editor, Anda dapat memilih editor yang diinginkan dan
menambahkan editor baru dengan klik Browse.

3. Jika Anda mengganti editor, disarankan untuk me-restart Unity Anda,


sehingga tampilan menjadi seperti berikut:
1. MonoDevelop
2. Visual Studio Code

3. Notepad++

D. Variable

Sebuah variable (variabel) dapat menyimpan satu dari 2 tipe nilai, yaitu
value type dan reference type.

 Values Type adalah dasar dari tipe data primitif seperti char, int, dan float,
serta tipe user-defined yang dideklarasikan dengan struct.
 Reference Type adalah kumpulan class atau data kompleks yang dibangun
dari tipe data primitif.
Macam-macam variabel yang terdapat di Unity:

Setiap komponen pada GameObject merupakan Reference Type. Untuk


mengetahui lebih detail tentang perbedaan antara value dan reference type, Anda
bisa melihatnya di Data Types.

Modifier Access

Modifier Access merupakan hak akses user untuk memanggil sebuah variabel
dari sebuah kelas.

 Public
Variabel yang dapat dipanggil/diakses dari kelas lain, misalnya:

. public string nama = “Alif”;

 Protected
Variabel yang dapat dipanggil/diakses hanya dari kelas turunan, misalnya:

. protected string nama = “Ali”;


 Private
Variabel yang hanya dapat diakses oleh kelas itu sendiri, misalnya:

. private string nama = “Ali”;

 Default
Variabel yang memiliki hak akses sama seperti Private, misalnya:

. string nama = “Ali”;

Cara Deklarasi Variable

Cara deklarasi variabel yang sering digunakan dalam membuat game dapat
dikelompokkan sebagai berikut:

 Global Variable
Variabel yang dapat digunakan atau dipanggil oleh semua fungsi atau method,
misalnya:

. public class Contoh : MonoBehaviour {


. string nama = "Dico"; // Global Variable
. void Start () {
. Debug.Log ("My Name: "+nama); //Kamu dapat panggil disini
. }
.
. void Update () {
. Debug.Log ("My Name: "+nama); //Kamu dapat panggil disini
. }
. }
 Local Variable
Variabel yang hanya dipanggil pada method atau fungsi di mana ia
dideklarasikan, misalnya:

. public class Contoh : MonoBehaviour {


. void Start () {
. string nama = "Dico"; //Local Variable
. Debug.Log ("My Name: "+nama); //Kamu dapat panggil disini
. }
. void Update () {
. //Kamu tidak dapat panggil disini
. }
. }

 Constant Variable
Variabel yang memiliki nilai tetap dan tidak dapat diubah, misalnya:

. public class Contoh : MonoBehaviour {


. const string ID = "1234"; //Constant Variable
. }

 Static Variable
Variabel yang dapat langsung dipanggil oleh kelas lain tanpa harus membuat
objek dari kelas itu sendiri, misalnya:

. public class Data {


. public static string ID = "1234"; //Static Variable
. }

Kelas yang memanggil static variable.

. public class Contoh : MonoBehaviour {


.
. void Start () {
. Debug.Log ("ID: "+Data.ID); //Kamu dapat panggil disini
. }
. }

Aturan Penulisan Nama Variable

Penulisan nama variabel sebenarnya bebas, tetapi untuk membedakan


penulisan lainnya, yakni antara variabel dengan kelas dan fungsi, kita
membutuhkan sebuah penulisan khusus seperti ini:

 Kata diawali huruf kecil, misalnya: timer, nama, alamat.


 Jika lebih dari 2 kata, maka kata kedua diawali huruf besar,
misalnya playerController, enemyZombie.

Tetapi hal di atas tidak berlaku pada variabel Konstanta yang memiliki
aturan sebagai berikut:

 Semua huruf pada kata terdiri dari huruf besar, misalnya TOKEN.
 Jika lebih dari 2 kata, maka dipisahkan dengan garis bawah (underscore),
misalnya TOKEN_ADS.

E. Function

Di dalam pemrograman, function juga digunakan untuk memudahkan kita


untuk memahami sekumpulan kode. Dengan menggunakan function yang
diimplementasikan dengan baik, kode akan lebih sederhana dan rapi.

Aturan penulisan Function atau Method:

 Setiap kata diawali dengan huruf besar, misalnya:

. Tambahkan();

 Jika nama fungsi lebih dari 2 kata, maka kata kedua menggunakan huruf
besar, misalnya:

. SamaDengan();
F. Classes dan Object

Class adalah sebuah bangunan dasar dari bahasa berorientasi object. Ia berisi
metode dan variabel yang berfungsi untuk menciptakan
suatu instance dari object. Sedangkan, object itu sendiri adalah perumpamaan
dari class yang merepresentasikan sebuah object. Anda dapat melihat bagan di
bawah ini.

Setiap class dapat direpresentasikan ke banyak object. Penggunaan prinsip di


atas memudahkan kita untuk mengelompokkan sesuatu yang memiliki sifat yang
sama. Misalnya, dari class mobil dapat dibuat beberapa object seperti Jazz,
Avanza, Kijang, dan lainnya. Setiap object dapat memanggil Property dan
Method yang memiliki akses modifier public yang terdapat dalam suatu class.

Berikutnya adalah contoh penerapan Class dan Object pada game, tepatnya
pada class Karakter yang nantinya akan digunakan sebagai object di Player.
Perhatikan bagan di bawah ini:
Sebuah class Karakter memiliki property seperti Name, Health, dan
Damage. Class tersebut juga memiliki method seperti MoveLeft(), MoveRight(),
Jump() dan Attack(). Pada object Player yang merupakan representasi
dari class Karakter, Anda dapat menggunakan dan mengubah nilai yang terdapat
di properties dan dapat juga memanggil methods yang terdapat di Karakter.

G. Inheritance

Inheritance atau warisan adalah konsep Pemrograman Berorientasi Objek


(OOP) yang digunakan untuk mengakses dan menggunakan kembali sifat atau
metode satu kelas dari kelas lainnya. Di dalam inheritance, kelas dasarnya
dikenal sebagai Base Class (kelas dasar). Sementara kelas yang mewarisi
dari base dikenal sebagai Derived Class (kelas turunan).

Ketika membuat kelas baru di Unity, maka secara otomatis kelas tersebut
merupakan turunan dari MonoBehaviour sebagai default-nya. Di dalam kelas
turunan ini kita bisa mengakses banyak fungsi seperti Update(), Start(), dan
fungsi lain yang dimiliki oleh class Monobehaviour.

. using System.Collections;
. using System.Collections.Generic;
. using UnityEngine;
.
. public class Kosongan : MonoBehaviour {
.
. // Use this for initialization
. void Start() {
.
. }
.
. // Update is called once per frame
. void Update() {

.
. }
. }

Berikut ini adalah ilustrasi pada kelas turunan.

Jika kelas A memiliki method SeniLukis() dan Menyanyi() dan B


merupakan turunan dari kelas A, maka B memiliki method yang sama dengan
kelas A. Kemudian base class (kelas dasar) dapat diturunkan ke beberapa kelas
turunan. Kelas turunan tersebut juga dapat diturunkan kembali ke kelas turunan
yang lain, seperti yang ditampilkan pada bagan di bawah ini:
Kelas B memiliki warisan dari kelas A, sedangkan kelas D memiliki warisan dari
kelas C dan kelas A. Berikut ini adalah contoh turunan pada variabel base
class (kelas dasar) ke kelas yang lain.

Kemudian, terdapat 3 base modifier untuk menentukan apa saja function yang
dapat diturunkan atau tidak, yakni sebagai berikut:

1. Public, merupakan feature pada method, property atau variable yang dapat
diturunkan kepada kelas yang diwariskan dan dapat diakses juga oleh kelas yang
bukan turunannya.
2. Protected, murupakan feature pada method, property atau variable yang dapat
diturunkan kepada kelas yang diwariskan tetapi tidak dapat diakses oleh kelas
yang bukan turunannya.
3. Private, murupakan fitur pada method, property atau variable yang tidak
dapat diturunkan kepada kelas yang diwariskan serta tidak dapat diakses oleh
kelas yang bukan turunannya.

H. Array

Jika Anda terbiasa menggunakan bahasa Java, mungkin akan sedikit bingung
dengan penulisan Array di C#. Jangan khawatir, Anda dapat mempelajari
perbedaannya di pembahasan ini. Array digunakan untuk menyimpan tipe data
sejenis yang dikelompokkan sebagai satu kesatuan, seperti contoh di bawah ini.

Kita menyimpan tipe data integer dengan 5 data yaitu 50, 20, 30, 10, dan 40.
Data tersebut dapat diakses oleh nomor indeks. Misalnya, untuk mendapatkan
nilai data 10 pada indeks 3, kita dapat menulis myArray[3]. Berikut ini beberapa
latihan tentang array:

 Single Dimension Arrays


Menyimpan banyak nilai dalam satu variabel, misalnya:
1. int[] intArray; //Deklarasi Array

2.
3. void Start () {

4. intArray = new int[4]; //Inisialisasi Array

5.
6. intArray[0] = 10; //Memasukkan nilai ke Array

7. intArray[1] = 20;

8. intArray[2] = 30;

9. intArray[3] = 40;

10. }

 Multi-Dimensional Arrays

Berikut ini adalah contoh array 2 dimensi di mana untuk mendapatkan sebuah
nilainya, kita perlu 2 buah nilai, misalnya baris ke 1 dan kolom ke 0 dengan nilai
30.

1. int[,] intArray2; //Deklarasi Array

2.
3. void Start () {

4. intArray2 = new int[2,2]; //Inisialisasi Array

5.
6. intArray2[0,0] = 10; //Memasukkan nilai ke Array

7. intArray2[0,1] = 20;

8. intArray2[1,0] = 30;

9. intArray2[1,1] = 40;

10. }

 Jagged Arrays

Bisa dikatakan "array di dalam array," misalnya:

1. int[][] intArray3; //Deklarasi Array

2.
3. void Start () {

4. intArray3 = new int[2][]; //Inisialisasi Element

5.
6. intArray3[0] = new int[2]; //Inisialisasi Array
7. intArray3[1] = new int[3];

8. intArray3[0][0] = 10; //Memasukkan nilai ke Array

9. intArray3[0][1] = 20;

10. intArray3[1][0] = 30;

11. intArray3[1][1] = 40;

12. intArray3[1][2] = 50;

13. }

Untuk lebih detailnya, silakan lihat di tautan berikut:


https://docs.unity3d.com/ScriptReference/Array.html.

III. Alat dan Bahan


1. Laptop ASUS X502U
2. Aplikasi Unity 2019
3. Aplikasi Visual Studio 2015
IV. Materi

A. Menyusun Tampilan Game


Pertama kali sebelum memulai menyusun tampilan game, kita harus membuat
project baru di Unity. Langkah-langkahnya antara lain:
1. Buka Unity.

2. Klik New atau klik menu File > New Project.

3. Masukkan nama proyek yang diinginkan, yakni "Praktik6”

4. Pilih atau centang pada 2D.

5. Pada field Location pilih tempat di mana proyek tersebut akan disimpan.

6. Untuk tutorial ini pilih OFF di sebelah tulisan “Enable Unity Analytics.”

7. Klik tombol “Create project.”


Praktik: Menyusun Tampilan Game
Buka folder asset yang nantinya akan digunakan dalam pembuatan game. Import
gambar yang akan dibuat game pengelompokan

Langkah-langkah untuk menyusun asset di atas adalah sebagai berikut:

1. Pertama tama adalah penyusunan folder asset. Tujuan dari penyusunan folder asset
agar tidak merepotkan user saat pembuatan game. Berikut adalah contohnya

Keterangan:
 Audios, untuk menyimpan berkas sound dan musik

 Images, untuk menyimpan berkas gambar

 Prefabs, untuk menyimpan pengaturan sebuah gameobject

 Scenes, untuk menyimpan scene (halaman)

 Scripts, untuk menyimpan berkas script

2. Import gambar yang akan digunakan dalam pembuatan game ini dengan cara klik
kanan-> import project atau dengan drag and drop gambar yang ingin diimport ke
dalam folder image.
3. Pada panel Inspector dari Asset yang sudah dimasukkan kedalam folder images
tadi , pastikan format semua asset gambar adalah Sprite (2D and UI). Seperti gambar
di bawah ini:

Keterangan :
Type Sprite adalah tipe gambar yang digunakan untuk object 2D dan juga object UI.
Sedangkan untuk object 3D menggunakan Type Texture.

Praktik: Mengatur Resolusi dan Background

1. Pada Panel Game klik Resolusi (Free Aspect) > klik icon tambah “+” > atur
nama Label “HD” > Width & Height 1280 x 720 > Klik OK untuk menyimpan
pengaturan resolusi baru yang sudah dibuat.
2. Drag gambar Background yang terdapat pada folder Images menuju
panel Hierarchy atau Scene.

3. Atur nilai konfigurasi dari Background dengan nilai Order in Layer menjadi -1
pada panel Inspector seperti gambar di bawah ini
Order in Layer berfungsi untuk melihat posisi yang mana terlebih dahulu ditampilkan.
Jika nilai semakin besar maka gambar tersebut semakin terlihat di depan objek
lainnya. Selain itu juga, Anda dapat mengatur posisi sumbu Z untuk menentukan
object mana yang berada di depan objek lain.

4. Selanjutnya ubah pengaturan dari Main Camera dengan cara klik Main
Camera pada panel Hierarchy. Kemudian pada Panel Inspector ubah Clear
Flags menjadi Depth only dan Size menjadi 3.6

Depth only adalah kondisi di mana secara default kamera tidak memberi background
apapun karena menggunakan background sendiri.
Praktik: Menyusun Game Object

1. Susun Objek pengelompok yaitu logo video dan photo, dengan import dengan cara
drag and drop logo grafis.png dan video.png ke dalam hierarchy. Susunlah seperti
berikut:

2. Selanjutnya masukkan salah satu object photo dan salah satu object Video ke
dalam panel Scene

3. Ubah nama Object nama objek pada Panel Inspector menjadi nama
object_photo dan nama object_video agar mempermudah proses editing dan ubah
nilai Order in Layer menjadi 1.
Praktik: Membuat Text Score dan Menyimpan Project

1. Tambahkan text pada Hierarchy dengan cara klik kanan->UI->Text


0
2. Atur konfigurasi pada obyek Canvas di Panel Inspector dengan pengaturan sebagai
berikut:
 Render Mode: Screen Space - Camera

 Render Camera: Main Camera

 Plane Distance: 5 (Jarak dengan Main Camera)

 Order in Layer: 2 (Supaya Text Score muncul paling depan)

3. Ubah nama Object Text di dalam Canvas menjadi Score dan sesuaikan
pengaturannya sebagai berikut:
 Mengatur custom Rect Transform: Top-Center (sebagai acuan posisi text)

 Pos x : 0 dan pos Y : -50

 Width 150 Height 100

 Set Text: 0

 Font syle : Bold

 Font Size : 72

 Aligment : Center
4. Simpan Scene yang telah Anda buat ke dalam folder Scenes dengan
nama Gameplay. Caranya, klik Menu File > Pilih Save Scenes As atau tekan Ctrl +
Shift + S.
Menambahkan Component dan Tag pada Game Object

Praktik: Menambahkan komponen pada app editing photo dan app editing
video

Kali ini kita akan membuat app Editing photo dan Editing Video yang posisinya tidak
mempengaruhi perubahan yang disebabkan object lain dan dari gravitasi. Maka dari
itu kita perlu menambahkan Rigidbody Kinematic. Kemudian pada object sampah
satu dengan lainnya bisa bertumpukkan. Maka atur collider pada objek tersebut
menjadi Trigger. Langkah-langkahnya sebagai berikut:

1. Tambahkan Rigidbody 2D pada GameObject _photo dan _video dengan


cara (Add Component > Rigidbody 2D) Kemudian berikan nilai pada Body
Type menjadi Kinematic. Setelah itu Tambahkan Box Collider 2D pada
GameObject _photo dan _video (Add Component > Pilih Physics 2D > Pilih Box
Collider 2D). Kemudian Cheklist Is Trigger dan atur nilai Size X dan Size Y pada
Panel Inspector.
Praktik: Menambahkan Tag pada Photo dan Video

Tag digunakan untuk menandai sebuah atau beberapa GameObject dan juga
mempermudahkan pemanggilan GameObject tersebut di dalam script.
1.Pada GameObject _photo tambahkan tag Photo. Klik Tag > Kemudian pilih Add
Tag… Kemudian klik icon tambah “+” kemudian inputkan tag photo setelah itu
Klik Save/tekan Enter untuk simpan tag baru.

2. Tambahan tag Video pada GameObject _video dengan cara yang sama seperti
pada _photo sebelumnya.
Praktik: Menambahkan Component pada Box Photo dan Box Video

Kita perlu menambahkan collider pada Photo dan Video untuk mendeteksi object lain
yang memiliki komponen RigidBody 2D dan bisa collision dengan objek tersebut.
Langkah-langkahnya sebagai berikut:
1. Tambahkan Box Collider 2D pada BoxNonOrganik (klik
GameObject BoxNonOrganik > buka Inspector > Klik tombol Add Component >
Pilih Physics 2D > Pilih Box Collider 2D kemudian beri nilai Size nya.

Collider adalah area deteksi object. Area collider tersebut dikecilkan karena ketika
menarik object, sampah harus diarahkan ke tengah logo video atau photo agar logo
app photo atau video dapat menghilang

Menambahkan Script pada GameObject

Pratktik: Membuat Tampilan Acak pada app photo dan app video

1. Membuat script baru dengan nama GerakPindah. Cara menambahkannya yaitu


masuk terlebih dahulu folder Scripts yang sudah kita buat pada panel Project.
Kemudian klik kanan pada area folder Script > Pilih Create > Pilih C# Script. Tulis
Nama GerakPindah kemudian tekan Enter. Perlu diingat, penamaan script di folder
harus sama dengan nama pada isi script tersebut, jika berbeda maka akan error
2. Kemudian buka script GerakPindah.cs

3. Untuk membuat membuat tampilan GameObject Sampah dapat berganti-ganti


maka tambahkan kode pada GerakPindah.cs sebagai berikut:
. using System.Collections;

. using System.Collections.Generic;

. using UnityEngine;

.
. public class GerakPindah : MonoBehaviour {

. float speed = 3f;

. public Sprite[] sprites;

. // Use this for initialization

. void Start () {

. int index = Random.Range(0, sprites.Length);

. gameObject.GetComponent<SpriteRenderer>().sprite = sprites[index];
. }

.
. // Update is called once per frame

. void Update () {

.
. }

. }
Simpan script

Pembahasan Kode:
float speed = 3f;

 Menyimpan nilai pecahan yang digunakan untuk menentukan kecepatan


dengan nilai awal 3
public Sprite[] sprites;

 Menyimpan nilai array tunggal yang nantinya digunakan untuk menyimpan


Gambar yang berupa sprite.
void Start () {

 Method ini hanya sekali dijalankan ketika pertama kali saja.


int index = Random.Range(0, sprites.Length);

 Memberi nilai Acak dengan batasan maksimal sejumlah array Sprite yang
dimasukkan.
gameObject.GetComponent<SpriteRenderer>().sprite = sprites[index];

 Mengganti gambar object sampah dari gambar sprite yang akan


dimasukkan.

4.Tambahkan komponen Script yang telah dibuat pada


GameObject _photo (Klik Add Component > Pilih Scripts > Pilih Gerak Pindah
atau dengan drag script GerakPindah ke Inspector GameObject _photo)

5. Setelah Komponen Script Gerak Pindah dimasukkan, atur Sprites dengan


membari Size 3 dan lalu masukkan sprite photo dari folder Images ke Element
Sprites pada Script Gerak Pindah.
6. Lakukan hal yang sama terhadap GameObject Video dengan memasukkan
komponen script Gerak Pindah dan masukkan sprite video ke dalam element Scripts
pada Komponen script Gerak Pindah.

Praktik: Membuat Game Object Photo dan Video Bergerak

1. Kemudian kita akan membuat GameObject bergerak sesuai arah escalator


(Bergerak dari kanan ke kiri). Buka kembali script GerakPindah.cs dengan klik 2x di
panel Project. Kemudian tambahkan kode di bawah ini di dalam method Update()
sebagai berikut:

. float move = (speed * Time.deltaTime * -1f) + transform.position.x;


. transform.position = new Vector3(move, transform.position.y);
Jangan lupa untuk menyimpan perubahan pada script dengan tekan Ctrl+S.
Pembahasan Kode:
float move = (speed * Time.deltaTime * -1f) + transform.position.x;

 Menghitung pergerakkan ke kiri berikutnya pada suatu object berdasarkan


sumbu x.
transform.position = new Vector3(move, transform.position.y);

 Mengimplementasikan pergerakkan secara horisontal pada Gameobject.


Praktik: Membuat GameObject Photo dan Video dapat Dipindahkan

1. Supaya GameObject photo dan video dapat digerakkan dengan Mouse/Touch, buka
kembali script GerakPindah.cs dengan klik 2x di panel Project. Tambahkan kode di
bawah ini di dalam class GerakPindah atau di bawah function Update().
. private Vector3 screenPoint;

. private Vector3 offset;

. private float firstY;

. void OnMouseDown()

. {

. firstY = transform.position.y;

. screenPoint = Camera.main.WorldToScreenPoint(gameObject.transform.position);

. offset = gameObject.transform.position - Camera.main.ScreenToWorldPoint(new Vect


or3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z));

. }

. void OnMouseDrag()

. {

. Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.


y, screenPoint.z);

. Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint) + offset;

. transform.position = curPosition;

. }

. private void OnMouseUp()

. {

. transform.position = new Vector3(transform.position.x,firstY, transform.position


.z);

. }

Simpan perubahan pada script dengan tekan Ctrl+S.


Pembahasan Code:
private Vector3 screenPoint;

 private digunakan ketika variable tersebut hanya digunakan pada Class


tersebut. Vector3 digunakan untuk menyimpan 3 nilai berupa X, Y dan Z.
ScreenPoint digunakan untuk menyimpan nilai posisi object terhadap screen.
private Vector3 offset;

 Variabel ini digunakan untuk menyimpan selisih posisi object dengan posisi
mouse
private float firstY;

 Variabel ini digunakan untuk menyimpan posisi vertikal awal yang nantinya
digunakan untuk mengembalikan ke posisi semula
void OnMouseDown()
{
firstY = transform.position.y;
screenPoint = Camera.main.WorldToScreenPoint(gameObject.transform.position);
offset = gameObject.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePositio
n.x, Input.mousePosition.y, screenPoint.z));
}

 Method ini dijalankan ketika mouse/ touch klik pada sebuah Gameobject
memiliki Collider. Method ini hanya sekali dijalankan ketika ada action dari
mouse/touch. Method ini menjalankan code yang berfungsi untuk melakukan
inisialisasi terhadap Gameobject dan mouse yang nanti nilai tersebut akan
digunakan untuk menggeser Gameobject tersebut.
void OnMouseDrag()
{
Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);
Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint) + offset;
transform.position = curPosition;
}

 Method ini dijalankan ketika mouse/ touch klik dan tahan pada sebuah
Gameobject memiliki Collider. Method ini terus dijalankan sampai
melepaskan untuk klik Gameobject tersebut. Method ini menjalankan code
yang berfungsi untuk melakukan pemindahan posisi Gameobject berdasarkan
posisi mouse.
private void OnMouseUp()
{
transform.position = new Vector3(transform.position.x,firstY, transform.position.z);
}

 Method ini dijalankan ketika mouse/ touch melepaskan klik pada sebuah
Gameobject memiliki Collider. Method ini hanya sekali dijalankan ketika
mouse/touch melepaskan klik terhadap Gameobject tersebut. Method ini
menjalankan kode yang berfungsi untuk mengembalikan posisi pada
Gameobject ke posisi awal.

Mendeteksi Box dengan Object Photo dan Video

Setelah Object Photo dan Video selesai, langkah selanjutnya adalah menyiapkan
GameObject Box untuk mendeteksi GameObject app (Photo dan Video)
Praktik : Menyimpan Data Score
1. Membuat Script baru dengan nama Data.cs di folder Scripts

2. Masukkan code dibawah ini ke dalam script Data.cs


public class Data {

public static int score;

Simpan perubahan pada script dengan tekan Ctrl+S

Pembahasan Code:
public static int score;

 Digunakan untuk menyimpan score yang dapat diakses langsung tanpa harus
deklarasi class nya. Class ini tidak menggunakan Monobehavior karena fungsi
dari Monobehavior tidak digunakan sehingga script kamu akan lebih efisien.
jika tidak dihapus juga tidak masalah dan juga tidak menyebabkan error.

Praktik : Membuat objek Untuk Mendeteksi Photo atau Video


1. Membuat Script baru dengan nama Deteksi.cs di folder Scripts

2. Masukkan kode dibawah ini ke dalam script DeteksiSampah.cs

using UnityEngine;

using UnityEngine.UI;
public class DeteksiSampah : MonoBehaviour

public string nameTag;

public AudioClip audioBenar;

public AudioClip audioSalah;

private AudioSource MediaPlayerBenar;

private AudioSource MediaPlayerSalah;

public Text textScore;

// Use this for initialization

void Start()

MediaPlayerBenar = gameObject.AddComponent<AudioSource>();

MediaPlayerBenar.clip = audioBenar;

MediaPlayerSalah = gameObject.AddComponent<AudioSource>();

MediaPlayerSalah.clip = audioSalah;

void OnTriggerEnter2D(Collider2D collision)

if (collision.tag.Equals(nameTag))

Data.score += 25;

textScore.text = Data.score.ToString();

Destroy(collision.gameObject);

MediaPlayerBenar.Play();

else

Data.score -= 5;

textScore.text = Data.score.ToString();

Destroy(collision.gameObject);

MediaPlayerSalah.Play();

Simpan perubahan pada script dengan tekan Ctrl+S

Pembahasan Code:
using UnityEngine.UI;

 Untuk Penggunaan Komponen UI, harus menambahkan


Library UnityEngine.UI.
public static int score;

 Digunakan untuk menyimpan score yang dapat diakses langsung tanpa harus
deklarasi classnya

public string nameTag;

 Digunakan untuk menyimpan string namaTag yang nanti akan digunakan


untuk filter gameobject apa saja yang akan di proses.

public AudioClip audioBenar;

public AudioClip audioSalah;

 Digunakan untuk menyimpan resources audio yang nanti diperoleh dari file
audio yang terdapat di Panel Project.

private AudioSource MediaPlayerBenar;

private AudioSource MediaPlayerSalah;

 Digunakan untuk control audio baik itu untuk play, loop, pause dan stop.

public Text textScore;

 Digunakan untuk menampilkan score yang telah didapat dan pastikan sudah
menambah library using UnityEngine.UI;

MediaPlayerBenar = gameObject.AddComponent<AudioSource>();

MediaPlayerBenar.clip = audioBenar;

MediaPlayerSalah = gameObject.AddComponent<AudioSource>();

MediaPlayerSalah.clip = audioSalah;

 Digunakan untuk mendeklarasikan audio pada Control Audio supaya dapat


dimodifikasi.

void OnTriggerEnter2D(Collider2D collision)

if (collision.tag.Equals(nameTag))

Data.score += 25;

textScore.text = Data.score.ToString();

Destroy(collision.gameObject);

MediaPlayerBenar.Play();

else
{

Data.score -= 5;

textScore.text = Data.score.ToString();

Destroy(collision.gameObject);

MediaPlayerSalah.Play();

 Jika tag object yang masuk ke area Trigger adalah tidak sesuai dengan
namaTag, maka score akan dikurangi dan score akan ditampilkan ke textScore.
setelah itu object tersebut di-destroy dan audio untuk salah dijalankan.

3. Memasukkan scripts Deteksi.cs ke GameObject Box Photo dan Video

Anda masih tidak dapat langsung menjalankan gamenya. Anda harus mengisi field
yang terdapat di Komponen script Deteksi. Lanjutkan ke langkah selanjutnya.

Praktik : Menambahkan Audio


1. Import Audio yang telah diunduh dengan membuat folder dan rename menjadi
Audio, setelah itu klik kanan->import package->pilih Audionya. Atau degan cara
Drag and Drop
3. Masukkan kedua Audio ke Komponen Script Deteksi Sampah pada
GameObject BoxNonOrganik dan BoxOrganik. Masukkan Text Score pada
component script DeteksiSampah.

5. Masukkan Name Tag untuk GameObject Photo dengan name Tag “Photo”.

Untuk GameObject BoxOrganik dengan Name Tag “Organik”.

Pastikan besar kecil huruf benar dan sudah sudah sesuai dengan nama Tag yang telah
dibuat sebelumnya.

Membuat Game Over

Setelah gameplay selesai dibuat, selanjutnya kita membuat tampilan Game Over ketika
object sampah gagal dipilah. Langkah-langkahnya sebagai berikut:
Praktik: Menambahkan Scene Gameplay ke Scene In Build

1. Kita akan menambahkan Scene Gameplay ke Scenes In Build di Build Settings.


Sebelum menambahkan scene ke list Scenes In Build, simpan terlebih dulu. Untuk
menambahkan ke Scenes In Build, klik Menu File > Pilih Build Settings... > klik Add
Open Scenes > Lalu muncul list Scene Gameplay di Daftar Scenes In Build. Kemudian
close jendela Build Settings

Scene yang dapat dipanggil di script hanya scene yang sudah ditambahkan di dalam
daftar Scenes in Build. Apabila masih terdapat SampleScene pada Build Settings, Anda
dapat menghapus dan menggantinya dengan Scene Gameplay saja.
Praktik : Membuat Scene Game Over
1. Membuat Scene baru dengan cara Klik Menu File > Pilih New Scene.

Anda juga dapat membuat Scene baru dengan tekan Ctrl+N.

2. Setelah membuat scene baru maka tampil hierarchy dalam kondisi kosong. Kemudian
kita dapat membuat UI Gameover dengan memasukkan Sprite Gameover dari
folder Images di Panel Project ke Panel Hierarchy dengan cara Drag sprite tersebut.
3. Membuat Script baru di dalam folder Scripts dengan nama GameOver.

4. Masukkan Script di bawah ini ke Script GameOver.cs.


. using System.Collections;
. using System.Collections.Generic;
. using UnityEngine;
. using UnityEngine.SceneManagement;
.
. public class GameOver : MonoBehaviour
. {
.
. float timer = 0;
. // Update is called once per frame
. void Update()
. {
. timer += Time.deltaTime;
. if (timer > 2)
. {
. Data.score = 0;
. SceneManager.LoadScene("Gameplay");
. }
. }
. }
Simpan perubahan pada script dengan tekan Ctrl+S.
Pembahasan Kode:
timer += Time.deltaTime;
if (timer > 2)
{
Data.score = 0;
SceneManager.LoadScene("Gameplay");
}

 Saat masuk ke tampilan Gameover dan waktunya lebih dari 2 detik, maka game
akan reset seperti semua dan kembali ke Tampilan gameplay.
Penggunaan MethodSceneManager.LoadScene() harus memasukkan
library using UnityEngine.SceneManagement;

5. Kemudian masukkan komponen Script Gameover.cs ke GameObject Main Camera

6. Pada GameObject MainCamera, Atur Clear Flags menjadi Depth only.

Depth Only jika berpindah halaman dari Gameplay ke Gameover, maka tampilan
backgorund di halaman Gameover merupakan tampilan terakhir dari Gameplay. Langkah
ini bersifat opsional.
Ketika Scene Gameover dijalankan, maka layer dibelakang text berwarna gelap dan
beberapa detik menuju ke scene gameplay.

7. Setelah membuat berhasil, simpan Scene yang telah dibuat dengan tekan Ctrl+S dan
beri Nama GameOver. Kemudian masukkan ke dalam daftar Scenes in Build di Build
Settings.
Praktik: Membuat Kondisi Gameplay menuju GameOver
1. Buka Scene Gameplay kemudian masuk kedalam folder Script dan
buka BatasAkhirSampah.cs.
2. Hilangkan tanda 2 slash ( “//” ) di dalam method OnTriggerEnter2D yang ada
didepan kode SceneManager.LoadScene(“GameOver”);. Kemudian jangan lupa untuk
simpan perubahan (Ctrl+S). Sehingga hasilnya sebagai berikut:

3. Supaya aplikasi dapat keluar ketika tekan Escape pada keyboard atau Back pada
device mobile, buatlah Script baru dengan nama Keluar.cs . Masukkan script seperti di
bawah ini :
. using System.Collections;
. using System.Collections.Generic;
. using UnityEngine;
. public class Keluar : MonoBehaviour
. {
. // Use this for initialization
. void Start()
. {
.
. }
.
. // Update is called once per frame
. void Update()
. {
. if (Input.GetKeyUp(KeyCode.Escape))
. {
. Application.Quit();
. }
. }
. }

Pembahasan Code:
if (Input.GetKeyUp(KeyCode.Escape))
{
Application.Quit();
}
 Script ini berfungsi ketika keyboard menekan escape atau device mobile
menekan tombol back maka Aplikasi akan keluar.

4. Masukkan komponen Script Keluar.cs ke dalam GameObject MainCamera di


Scene Gameplay.

Praktik: Membuat Package Project


1. Untuk langkah terakhirnya adalah menjadikan sebuah berkas .exe dengan cara Klik
menu File > pilih Build Settings.. > Klik Build. Kemudian muncul jendela Build.
Buat Folder baru dengan nama Build kemudian simpan hasil build dengan
nama Praktik6.exe

Maka hasil build untuk PC sebagai berikut:

Anda mungkin juga menyukai