Anda di halaman 1dari 153

Definisi Game

Game merupakan sebuah permainan/hiburan multimedia yang dibuat


semenarik mungkin untuk menghibur/memenuhi kepuasan pemain.Di
dalam Game, umummyaterdapat reward system (sistem penghargaan)
bagi pemain, misalnya dalam bentuk skor.Skor dihitung berdasar tingkat
keberhasilan yang dicapai pemain dalam menyelesaikan tugas-tugas yang
ada di dalam Game.

Genre 

Ketika kita mengaktifkan fungsi pencarian  game di sebuah aplikasi Store,


akan muncul beberapa genre game yang bisa kita nikmati.

Genre Game berbeda-beda berdasarkan cara bermain, tujuan, dan seni di


dalamnya, antara lain: 

 Action: permainan aksi yang menekankan pada tantangan fisik.


Dibutuhkan koordinasi mata dan keterampilan motorik untuk
mengatasai tantangan tersebut. Genre Action memiliki banyak sub-
genre seperti game platform, game fighting dan game shooter. 
 Action-Adventure: permainan kombinasi yang memadukan unsur-
unsur dari dua genre yang berbeda; aksi dan petualangan. Pemain
biasanya ditantang untuk mengumpulkan item tertentu,
memecahkan teka teki, dan bertarung. 
 Adventure: game yang meminta pemain untuk memecahkan teka
teki melalui interaksi dengan orang atau ingkungan. Gameplay ini
umumnya dimainkan dengan santai. 
 Role-Playing: Gamedi mana pemain memerankan satu peran atau
lebih yang mengkhususkan diri pada keahlian spesifik dengan alur
yang telah ditentukan sebelumnya. Gameplay yang terkait seperti
contohnya RPG, MMORPG, dll. 
 Simulation: permainan yang dirancang untuk mensimulasikan
aspek nyata atau fiktif  secara dekat. Contohnya, simulasi
menerbangkan pesawat terbang, mengendarai mobil, dan lain-lain. 
 Strategy: permainan yang membutuhkan pemikiran dan
perancangan yang hati-hati dan terampil guna meraih
kemenangan. 
 Sport: merupakan permainan yang mensimulasikan olahraga.
Pemain lawannya dapat dikendalikan oleh orang lain atau
manifestasi dari kecerdasan buatan, contohnya game sepak bola. 
 Casual Game: permainan yang dapat diselesaikan dalam waktu
singkat dan dapat dimainkan dengan santai. Di dalam Game ini,
umumnya tidak ada konotasi negatif seperti kekerasan atau
konfrontasi. 
 Trivia Game: permainan menjawab pertanyaan.
 Massively Multiplayer Online (MMO) atau Massively
Multiplayer Online Game (MMOG): Game multiplayer yang
dapat dimainkan oleh banyak pemain dalam waktu bersamaan.
Permainan ini dapat ditemukan di sebagian besar platform yang
memiliki kemampuan jaringan seperti komputer pribadi, konsol,
smartphone, dan perangkat seluler lainnya.

Pengenalan Academy
Melalui Dicoding Academy ini, peserta akan dikenalkan pada berbagai
materi, mulai dari hal sederhana seperti proses instalasi peranti lunak
(software) hingga membuat proyek game Pukul Bola. Tujuannya, agar
peserta siap untuk membuat dan meluncurkan produk game-nya  sendiri.

Berikut contoh game yang akan Anda buat:


Materi ini di desain dengan cukup mudah untuk yang baru belajar maupun
sudah lama menggunakan Unity. Anda akan mempelajari tahap demi
tahap sehingga pada akhirnya menjadi sebuah project game. Setiap
modul terdapat contoh project. Jika Anda menginginkan Certificate, maka
Anda harus bisa menyelesaikan tantangan di akhir modul.

Tips agar lebih menguasai Materi

 Hindari penggunaan copy-paste ketika menulis kode.


 Jika menemukan error, Anda dapat bandingkan dengan screenshot full-
screen.
 Jika sudah memahami satu modul, lanjut ke submodul berikutnya.
 Pada akhir materi terdapat berkas project yang yang dapat diunduh.
 Jika sudah mengikuti modul, coba untuk memodifikasi game yang Anda
buat.
 Setiap akhir modul terdapat Kuis atau Tugas.
Unity

Unity adalah sebuah software game development (Game Engine) yang


digunakan untuk mengembangkan game multi-platform. Selain ke dalam
PC, Unity juga dapat di-build ke berbagai platform seperti di bawah ini:

Unity dapat digunakan untuk membuat game berbasis 3D atau berbasis


2D sehingga memungkinkan developer untuk berkreasi membuat
berbagai jenis game.

Persyaratan untuk Menginstall Unity 2018

Adapun persyaratan sebelum menginstall Unity sebagai berikut:

OS:

 Windows 7 SP1 atau lebih baru


 Windows  8
 Windows  10
 Mac OS X 10.9 atau lebih baru

(Catatan: Windows XP & Vista tidak support)

GPU:

 Graphics card dengan DX9 (shader model 3.0) atau


 DX11 with feature level 9.3 capabilities.

Hardware:

 Minimal memiliki kapasitas ram 4 GB dan disarankan memiliki 8 GB,

Praktik:  Unduh Unity

Dalam  pembelajaran ini kita menggunakan Unity 2018 dengan


menginstall versi 2018 atau yang terbaru secara online atau offline.

Unity menawarkan 3 pilihan yaitu Unity Personal (Free), Unity Plus, dan
Unity Pro atau kunjungi: https://store.unity.com/

Untuk instalasi offline, Anda dapat mengunjungi lamannya di tautan


ini: https://unity3d.com/get-unity/download/archive
 

Praktik:  Install Unity

Setelah mengunduh Unity dari store.unity.com, unduh pula Unity


Download Assistant. Siapkan koneksi internet yang memadai
untuk proses download. Sementara untuk instalasi, dapat dilakukan
baik secara online maupun offline, dengan langkah-langkah yang kurang
lebih sama, yakni sebagai berikut:

1. Buka file yang telah diunduh, kemudian klik Next untuk melanjutkan


Instalasi Unity.
2. Kemudian centang kotak Agreement untuk menyetujui ketentuan-
ketentuan dari Unity. Lalu, klik Next untuk melanjutkan instalasi.
3. Kemudian pilih komponen yang akan diinstall.

Komponen terdiri dari:

 Unity 2018, sebuah Unity Editor yang di dalamnya terdapat


Monodevelop untuk membuat sebuah game.
 Documentation, berisikan Unity user manual dan referensi Scripting
API yang dapat dikunjungi secara offline.
 Standard Assets, terdapat resources baik itu asset atau script untuk
memudahkan developer membangun sebuah game di Unity.
 Example Project, sebuah contoh project game yang menggunakan
standard asset yang disediakan oleh Unity.
 Build Support, salah satu kelengkapan membuat game dengan
mentargetkan platform tertentu.

Jika Anda terlewatkan untuk menginstall Unity, Documentation,


Standard Assets, dan Example Project. Anda dapat download
di https://unity3d.com/get-unity/download/archive.
Sedangkan untuk download build support, Anda dapat
mengunduh modul tersebut di jendela Build Settings.

4. Setelah itu, tentukan lokasi download dan lokasi install. Jika ingin
menyimpan installer yang telah diunduh, Anda dapat pilih Download
to. Kemudian jika ingin memiliki beberapa versi Unity, Anda dapat
menulis misal C:\Program Files\Unity2018.  Klik Next untuk
melanjutkan instalasi.

5. Tunggu hingga proses instalasi selesai. Klik Next untuk


menyelesaikan.
Praktik: Membuka Unity Pertama kali

Pastikan bahwa ketika pertama kali membuka Unity, komputer anda


terkoneksi dengan Internet, dan ikuti langkah-langkah berikut:

1. Login ke Unity Account. Jika Anda tidak memiliki Unity Account


Anda dapat membuat account baru dengan klik Create one, atau login
dengan Google Account atau Facebook Account.
2. Tentukan Lisense Unity yang Anda gunakan. Jika menggunakan
Unity gratis maka pilih Unity Personal dan kemudian klik Next

3. Kemudian muncul popup License Agreement. Tentukan sesuai


dengan kondisi Studio Anda. Jika Anda Menggunakan Unity hanya untuk
belajar, maka pilih yang paling bawah. Jika Anda menggunakan Unity
untuk tujuan komersial dengan keuntungan di bawah $100K per tahun
maka Anda pilih yang tengah. Jika Anda menggunakan Unity untuk
tujuan komersil dengan laba di atas $100K pertahun maka centang
yang paling atas.
4. Isilah survei dengan lengkap, kemudian klik OK untuk mengirim
hasilnya.

5. Konfigurasi Unity sudah selesai dan Unity Anda telah siap digunakan.
Klik Start Using Unity untuk membuka Unity.
Pengenalan Interface Unity
Berikut ini adalah tampilan Interface pada Unity, antara lain terdapat
Toolbar, Scene View, Hierarchy Window, Inspector Window, dan Project
Window.

Toolbar

Toolbar digunakan untuk memanipulasi Scene View dan obyek-obyek di


dalamnya. Fungsinya beragam, yakni dari dari memindahkan posisi view,
object, rotasi hingga skala obyek
Hierarchy Window

Hierarchy window digunakan untuk melihat daftar GameObject apa saja


yang ada di dalam scene. Setiap obyek yang ada di scene pasti masuk di
Hierarchy.

Scene Window

Scenes Window digunakan untuk melihat secara keseluruhan  obyek yang


digunakan di Game. Scenes Window juga dapat mengedit obyek, baik itu
dalam posisi, rotasi maupun skala.

Game View

Game View digunakan untuk melihat hasil akhir dari Game yang nantinya
akan ditampilan ke hadapan user.

Inspector Window

Inspector window digunakan untuk meng-edit semua properties pada


obyek yang aktif.

Project Window

Project window digunakan untuk menampilkan daftar aset yang dapat


digunakan dalam proyek Anda. Ketika menambahkan asset baru, maka
akan muncul di Project Window.

Console Window

Digunakan untuk mengetahui log-log dalam script dan informasi error


serta peringatan yang ada di script.

Pertanyaan:
Dari Gambar ini:
Pernyataan:

A. Tool yang digunakan untuk mengatur nilai Transfrom (Posisi, Rotasi dan
Skala)

B. Mengatur Nilai Properties dari suatu GameObject

C. Menampilkan Log  berupa Informasi, Peringatan dan Kesalahan.

D. Tampilan interaktif untuk Menyusun posisi, rotasi dan skala seluruh


GameObject.

E. Berisi seluruh File yang digunakan dalam Game.

F. Menampilkan tampilan hasil akhir dari Game yang telah disusun.

G. Mengorganisir dan mendaftarkan GameObject-GameObject dalam


sebuah Scene.

Pasangkanlah Nomor gambar dan pernyataan dengan benar!

Jawaban Anda
 1G, 2D, 3F, 4A

 1A, 2C, 3B, 4E

 1G, 2E, 3B, 4C


 1B, 2D, 3G, 4E

 1G, 2D, 3B, 4E

KIRIM JAWABAN

Basic Scripting
Kita akan membuat C# Script sederhana dengan menampilkan sebuah
Log di jendela Console.

Praktik: Membuat Project Baru

Kita bersiap membuat sebuah proyek baru yang akan digunakan di


pembelajaran ini.

Buka Unity, Kemudian klik New, lalu atur seperti di bawah ini:

Project name                       : BasicScripting

Mode                                       : 2D

Location                                : (tentukan lokasi project yang akan


disimpan)

Enable Unity Analytics    : OFF

Klik Create project
 

Praktik: Membuat Script

Untuk menampilkan text di Console, kita memerlukan sebuah script.


langkah-langkah sebagai berikut:

1. Membuat Script baru dengan klik kanan pada Jendela


Project > Create > C# Script, kemudian langsung beri nama
“Latihan1”
2. Klik 2x script Latihan1.cs

3. Kemudian muncul script Latihan1.cs di Editor Script MonoDevelop

1. usingSystem.Collections;
2. usingSystem.Collections.Generic;
3. usingUnityEngine;
4.
5. publicclassLatihan1:MonoBehaviour{
6.
7.     // Use this for initialization
8.     voidStart(){
9.        
10.     }
11.    
12.     // Update is called once per frame
13.     voidUpdate(){
14.        
15.     }
16. }

Secara default, pada script yang baru dibuat akan ditampilkan 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 lihat pada
link: https://docs.unity3d.com/ScriptReference/MonoBehaviour.ht
ml.
4. Menambahkan/mengubah code di Script Latihan1.cs

 Tambahkan kode ini di dalam method Start()

1. Debug.Log("Hello Dicoding!");
 Simpan perubahan pada script dengan tekan Ctrl+S

Sehingga tampil sebagai berikut:

1. usingSystem.Collections;
2. usingSystem.Collections.Generic;
3. usingUnityEngine;
4.  
5. publicclassLatihan1:MonoBehaviour
6. {
7.  
8.     // Use this for initialization
9.     voidStart()
10.     {
11.         Debug.Log("Hello Dicoding!");
12.     }
13.  
14.     // Update is called once per frame
15.     voidUpdate()
16.     {
17.  
18.     }
19. }
20.  

Pembahasan Code:

1. usingSystem.Collections;
2. usingSystem.Collections.Generic;
3. usingUnityEngine;

Library di atas  merupakan Library yang digunakan dalam perintah


dalam script. Seperti penggunaan variable GameObject,
Monobehavior, dll.

1. publicclassLatihan1

Nama kelas dari sebuah script. Nama Kelas harus sama dengan
nama file C# Script di folder Assets.

1.  voidStart()

Fungsi di atas  hanya dijalankan satu kali dan diawal saat program
dijalankan
1. Debug.Log("Hello Dicoding!");  

Debug.Log digunakan untuk menghasilkan output di Jendela


Console berupa text atau angka.

1. voidUpdate()

Dijalankan berulang-ulang setelah menjalankan function Start().

Praktik: Menjalankan Script

1. Drag n Drop Script Latihan1.cs ke GameObject Main Camera di


jendela Hierarchy

2. Klik icon Play pada Unity

3. Jika di klik Info tersebut maka akan muncul Jendela Console. Sebagai


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, dengan klik lagi pada icon Play.

5.Anda dapat simpan dengan klik menu File > Save Senes atau


tekan Ctrl+S. Kemudian beri nama Main.unity

Quiz Mini:

Menampilkan Nama Anda di Jendela Console, misalkan “Saya


<Nama Kamu> adalah Game Developer”
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 atau menonaktifkan


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

Fungsi MonoBehaviour untuk menonaktifkan script ketika di tidak di-


checklist. 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 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 diinisialisasi  Sehingga, Anda dapat memanggil objek
lain.

Contoh kode dari fungsi Awake:

1. usingSystem.Collections;
2. usingSystem.Collections.Generic;
3. usingUnityEngine;
4.  
5. publicclassLatihanAwake:MonoBehaviour{
6.    voidAwake(){
7.         Debug.Log("Awake Dipanggil");
8.   }
9. }

Pembahasan kode:

1. usingSystem.Collections;
2. usingSystem.Collections.Generic;
3. usingUnityEngine;

3 baris kode di atas adalah Library bawaan saat script dibuat. Kita dapat


memberi Library tambahan seperti scene, UI dan lainnya.

1. public class LatihanAwake:MonoBehaviour

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

1. void Awake()

Fungsi ini akan dipanggil selama script dijalankan.

1. 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 scriptdi nisialisasi, terlepas dari apakah script diaktifkan atau tidak.

Contoh kode dari fungsi Start:

1. usingSystem.Collections;
2. usingSystem.Collections.Generic;
3. usingUnityEngine;
4.  
5. public class LatihanStart:MonoBehaviour{
6.    void Start(){
7.         Debug.Log("Start Dipanggil");
8.    }
9. }

Pembahasan kode:

1. usingSystem.Collections;
2. usingSystem.Collections.Generic;
3. usingUnityEngine;

3 baris kode di atas adalah Library bawaan saat script dibuat. Kita dapat


memberi Library tambahan seperti scene, UI dan lainnya.

1. public class LatihanStart:MonoBehaviour

Nama kelas dari script. Nama kelas harus sama dengan


berkas script yang dibuat.

1. void Start()

Fungsi ini akan dipanggil saat script diaktifkan dan dijalankan.

1. Debug.Log("Start Dipanggil");

Akan terpanggil setelah fungsi Start() dijalankan.


Berikut ini contoh penerapan kedua fungsi tersebut, Awake dan Start.

1. usingSystem.Collections;
2. usingSystem.Collections.Generic;
3. usingUnityEngine;
4.  
5. public class Latihan1:MonoBehaviour{
6.     //fungsi Awake
7.     void Awake(){
8.         Debug.Log("Awake dipanggil");
9.     }
10.    
11.     //fungsi Start
12.     void Start(){
13.         Debug.Log("Start dipanggil");
14.     }
15. }

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:

1. usingSystem.Collections;
2. usingSystem.Collections.Generic;
3. usingUnityEngine;
4.  
5. public class LatihanUpdate:MonoBehaviour{
6.     void Update(){
7.         Debug.Log("Waktu untuk Update :"+Time.deltaTime);
8.   }
9. }

Pembahasan kode:

1. usingSystem.Collections;
2. usingSystem.Collections.Generic;
3. usingUnityEngine;
3 baris kode di atas adalah Library bawaan saat script dibuat. Kita dapat
memberi Library tambahan seperti scene, UI dan lainnya.

1. public class LatihanUpdate:MonoBehaviour

Nama kelas dari script. Nama kelas harus sama dengan berkas


script yang dibuat.

1. void Update()

Fungsi ini akan dipanggil saat script diaktifkan dan dijalankan setelah


Start().

1. 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
benda.

Contoh kode dari fungsi FixedUpdate:

1. usingSystem.Collections;
2. usingSystem.Collections.Generic;
3. usingUnityEngine;
4.  
5. public class LatihanFixedUpdate:MonoBehaviour{
6.     void FixedUpdate(){
7.         Debug.Log("Waktu untuk FixedUpdate :"+Time.deltaTime);
8.   }
9. }

Pembahasan kode:

1. usingSystem.Collections;
2. usingSystem.Collections.Generic;
3. usingUnityEngine;

3 baris kode di atas adalah Library bawaan saat script dibuat. Kita  dapat


memberi Library tambahan seperti scene, UI dan lainnya.
1. public class LatihanFixedUpdate:MonoBehaviour

Nama kelas dari script. Nama kelas harus sama dengan


berkas script yang dibuat.

1. voidFixedUpdate()

Fungsi ini akan dipanggil saat script diaktifkan dan dijalankan setelah


Update().

1. 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:

1. usingSystem.Collections;
2. usingSystem.Collections.Generic;
3. usingUnityEngine;
4.  
5. public class LatihanLateUpdate:MonoBehaviour{
6.     void LateUpdate(){
7.         Debug.Log("Waktu untuk LateUpdate :"+Time.deltaTime);
8.   }
9. }

Pembahasan kode:

1. usingSystem.Collections;
2. usingSystem.Collections.Generic;
3. usingUnityEngine;

3 baris kode di atas adalah Library bawaan saat script dibuat. Kita  dapat


memberi Library tambahan seperti scene, UI dan lainnya.

1. public class LatihanLateUpdate:MonoBehaviour
Nama kelas dari script. Nama kelas harus sama dengan
berkas script yang dibuat.

1. void LateUpdate()

Fungsi ini akan dipanggil saat script diaktifkan dan dijalankan setelah


Update() dan FixedUpdate().

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

Dijalankan saat fungsi LateUpdate() dijalankan dan akan menampilkan


waktu berbeda.

Berikut ini contoh penerapan ketiga


fungsi Update, FixedUpdate dan LateUpdate.

1. usingSystem.Collections;
2. usingSystem.Collections.Generic;
3. usingUnityEngine;
4.  
5. public class Latihan1:MonoBehaviour{
6.     void FixedUpdate(){
7.         Debug.Log("Waktu untuk FixedUpdate :"+Time.deltaTime);
8.     }
9.    
10.     void Update(){
11.         Debug.Log("Waktu untuk Update :"+Time.deltaTime);
12.     }
13.  
14.     void LateUpdate(){
15.         Debug.Log("Waktu untuk LateUpdate :"+Time.deltaTime);
16.     }
17. }

Selanjutnya kita akan membahas tentang Mengatur Editor Script

Mengatur Editor Script


Untuk Editor Script, secara default Unity
menggunakan MonoDevelop sebagai Editor Script.

Jika Anda ingin menggunakan Editor yang lebih terdepan, Anda dapat
menggunakan Visual Studio. Tetapi jika ingin yang lebih ringan, Anda
dapat menggunakan Notepad++ . Pemilihan itu tergantung kenyamanan
Anda dalam menulis kode dan spesifikasi komputer Anda.

 
(Opsional) Praktik: Mengubah Editor Script Unity

Untuk mengganti editor script, Anda dapat lakukan langkah-langkah


sebagai berikut:

1. Klik Menu Edit > Preferences...

2. Pada Jendela Unity Preferences, buka tab External Tools kemudian


pada External Script Editor. Anda dapat memilih editor yang Anda
inginkan dan dapat pula menambahkan Editor baru dengan Klik Browse.
3. Jika Anda mengganti Editor, disarankan untuk me-restart Unity Anda,
sehingga tampilan sebagai berikut:

 MonoDevelop

 Visual Studio 2017


 Notepad++

Silakan tentukan Editor Script yang cocok dengan kebutuhan Anda.

Selanjutnya akan membahas tentang Pengenalan Variable

Variable
Sebuah variable dapat menyimpan satu dari dua tipe nilai, yaitu value
type dan references type.
 Values Type adalah dasar dari tipe data primitive 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 primitive.

Macam-macam variable yang terdapat di Unity:

Setiap Komponen pada GameObject adalah 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


variable dari sebuah kelas.

 Public
Variable yang dapat dipanggil/diakses dari kelas lain
Misal:

1. publicstring nama =“Alif”;


 Protected
Variable yang dapat dipanggil/diakses hanya dari kelas turunan
Misal:
1. protectedstring nama =“Ali”;
 Private
Variable yang hanya dapat diakses oleh kelas itu sendiri
Misal:

1. privatestring nama =“Ali”;


 Default
Variable yang memiliki hak akses sama seperti Private
Misal:

1. string nama =“Ali”;

Cara Deklarasi Variable

Ada beberapa cara deklarasi variable yang sering digunakan dalam


membuat Game. Cara tersebut dikelompokkan sebagai berikut:

 Global Variable
Variable yang dapat digunakan atau dipanggil oleh semua fungsi atau
method
Misal:

1. publicclassContoh:MonoBehaviour{
2.     string nama ="Dico";// Global Variable
3.  
4.     voidStart(){
5.         Debug.Log("My Name: "+nama);// Kamu dapat panggil disini    
6.     }
7.    
8.     voidUpdate(){
9.         Debug.Log("My Name: "+nama);// Kamu dapat panggil disini
10.     }
11. }

 Local Variable
Variable yang hanya dipanggil pada method atau fungsi yang dimana
variable tersebut di deklarasikan.
Misal:

1. publicclassContoh:MonoBehaviour{
2.  
3.     voidStart(){
4. string nama ="Dico";// Local Variable
5.             Debug.Log("My Name: "+nama);// Kamu dapat panggil disini    
6.   }
7.   
8.     voidUpdate(){
9.         // Kamu tidak dapat panggil disini
10.     }
11. }

 Constant Variable
Variable yang memiliki nilai tetap dan tidak dapat diubah.
Misal:

1. publicclassContoh:MonoBehaviour{
2.     conststring ID ="1234";// Constant Variable
3. }

 Static Variable
Variable yang dapat langsung dipanggil oleh kelas lain tanpa harus
membuat object dari kelas itu sendiri.
Misal:
Kelas yang terdapat variable static

1. publicclassData{
2.    publicstaticstring ID ="1234";// Static Variable
3. }

Kelas yang memanggil variable static

4. publicclassContoh:MonoBehaviour{
5.  
6.     voidStart(){
7.             Debug.Log("ID: "+Data.ID);// Kamu dapat panggil disini    
8.   }
9. }

Aturan Penulisan Nama Variable

Penulisan nama variable sebenarnya bebas, tetapi untuk membedakan


penulisan yang lain (kelas dan fungsi) maka membutuhkan penulisan
khusus:

 Kata diawali huruf kecil

Misal: timer, nama, alamat.


 Jika lebih dari 2 kata, maka Kata kedua diawali huruf besar.

Misal: playerController, enemyZombie.

Tetapi hal diatas tidak berlaku pada variable Konstanta. Untuk Variable
Konstanta memiliki aturan sebagai berikut:

 Semua huruf pada kata terdiri dari huruf besar


Misal: TOKEN
 Jika lebih dari 2 kata, maka dipisahkan dengan garis bawah (Underscore)
Misal: TOKEN_ADS

Praktik: Membuat Script Baru (Latihan2.cs)

Untuk memudahkan pembelajaran, buat script baru dengan


nama Latihan2.cs

1. Buat C# Script baru dengan klik kanan pada jendela Project


> Create > C# Script > Langsung beri nama Latihan2
2. Drag Script Latihan2.cs ke GameObject Main Camera di
Jendela Hierarchy

3. Supaya Script Latihan2.cs dijalankan oleh Main Camera ketika


menjalankan Play Mode. Klik GameObject Main Camera di Hierarchy,
Kemudian Lihat Jendela Inspector. Lalu hilangkan centang pada
Script Latihan1.cs

Sehingga script pada Latihan 1 tidak dijalankan dan Main Camera akan
menjalankan script Latihan 2

Praktik: Variable unity

Pertama, kita mengimplementasi variable sederhana di Unity.

1. Buka Script Latihan2.cs 

 Tambahkan code ini didalam class Latihan2

1. int nilaiA =5;


2. int nilaiB =9;
 Tambahkan code ini di dalam method Start()

1. int totall = nilaiA + nilaiB;


2. Debug.Log("Total "+totall);
 Simpan dengan Ctrl+S

Sehingga tampilannya sebagai berikut:

1. usingSystem.Collections;
2. usingSystem.Collections.Generic;
3. usingUnityEngine;
4.  
5. publicclassLatihan2:MonoBehaviour
6. {
7.  
8.     int nilaiA =5;
9.     int nilaiB =9;
10.  
11.     // Use this for initialization
12.     voidStart()
13.     {
14.         int totall = nilaiA + nilaiB;
15.         Debug.Log("Total "+ totall);
16.     }
17.  
18.     // Update is called once per frame
19.     voidUpdate()
20.     {
21.  
22.     }
23. }

Kemudian hasilnya sebagai berikut:

Pada console menunjukkan informasi bahwa nilai total dari nilai A dan nilai
B adalah 14.

Praktik: Variable dan Inspector

Kita dapat mengubah nilai variable NilaiA dan NilaiB lewat jendela
Inspector dan tanpa harus mengubah nilai variable tersebut di script.
Caranya kita menggunakan variable public untuk memunculkan field di
Inspector. Detailnya sebagai berikut:

1. Buka script Latihan2.cs
 Ubahlah pada code

1. int nilaiA =5;


2. int nilaiB =9;

Menjadi

3. publicint nilaiA;
4. publicint nilaiB;
 Kemudian simpan perubahan dengan tekan Ctrl+S

Sehingga menjadi sebagai berikut:

1. usingSystem.Collections;
2. usingSystem.Collections.Generic;
3. usingUnityEngine;
4.  
5. publicclassLatihan2:MonoBehaviour
6. {
7.  
8.     publicint nilaiA;
9.     publicint nilaiB;
10.  
11.     // Use this for initialization
12.     voidStart()
13.     {
14.         int totall = nilaiA + nilaiB;
15.         Debug.Log("Total "+ totall);
16.     }
17.  
18.     // Update is called once per frame
19.     voidUpdate()
20.     {
21.  
22.     }
23. }

4. Kembali ke Unity, Klik Main Camera dan kemudian lihat


pada Inspector. Variable yang menggunakan modifier public akan
muncul di Inspector.  Lalu masukkan nilai dengan misal NilaiA = 12 dan
NilaiB = 13

Jika dijalankan hasilnya sebagai berikut:


Praktik: Attribute Variable

1. Buka Script Latihan2.cs

2. Tambahkan code di bawah ini di dalam Class Latihan2

 Tambahkan code ini di dalam class Latihan2

1. [Range(1,5)]
2.     publicint nilaiC;
 Ubah code yang terdapat di dalam function Start()

1. int totall = nilaiA + nilaiB;


 Menjadi

1. int totall =(nilaiA + nilaiB)* nilaiC;


 Simpan perubahan dengan tekan Ctrl+S

Sehingga script pada Latihan2 seperti berikut:

1. usingSystem.Collections;
2. usingSystem.Collections.Generic;
3. usingUnityEngine;
4.  
5. publicclassLatihan2:MonoBehaviour
6. {
7.  
8.     publicint nilaiA;
9.     publicint nilaiB;
10.     [Range(1,5)]
11.     publicint nilaiC;
12.  
13.     // Use this for initialization
14.     voidStart()
15.     {
16.         int totall =(nilaiA + nilaiB)* nilaiC;
17.         Debug.Log("Total "+ totall);
18.     }
19.  
20.     // Update is called once per frame
21.     voidUpdate()
22.     {
23.  
24.     }
25. }

3. Kembali ke Unity, Klik Main Camera dan kemudian lihat


pada Inspector. Lalu masukkan NilaiC = 4

Pada field NilaiC, hanya dapat diisi dari nilai 1 sampai nilai 5. Anda dapat
mengganti nilai dengan menggeserkan slider atau langsung memasukkan
nilai kedalam field.

Jika dijalankan sebagai berikut:

Anda dapat simpan yang telah Anda kerjakan di atas dengan klik
menu File > Save Scenes atau tekan Ctrl+S.

Selanjutnya akan membahas tentang Function


Function
Di dalam pemrograman, function juga digunakan untuk memudahkan kita
untuk memahami sekumpulan kode. Apabila menggunakan function, kode
akan lebih sederhana dan rapi jika diimplementasikan dengan baik.

Aturan Penulisan Function/Method

 Setiap kata diawali dengan Huruf Besar


Misal:

1. Tambahkan();
 Jika Nama fungsi lebih dari 2 kata maka kata kedua menggunakan huruf
besar
Misal:

1. SamaDengan();

Praktik: Membuat Script Baru (Latihan3.cs)

Untuk memudahkan pembelajaran, buat script baru dengan nama


Latihan3.cs. Langkah-langkahnya sebagai berikut:

1. Buat C# Script baru dengan klik kanan pada jendela Project


> Create > C# Script > Langsung beri nama Latihan3.
2. Drag script Latihan3.cs ke GameObject Main Camera di
jendela Hierarchy.

Tujuannya adalah agar main camera menjalankan


Script Latihan3.cs saat Play Mode.

3. Klik GameObject Main Camera di Hierarchy, Kemudian lihat


jendela Inspector. Lalu hilangkan centang pada script Latihan2.cs
Dengan ini, Main Camera hanya menjalankan script Latihan 3, namun
tidak Latihan 2.

Praktik: Function

Kemudian kita akan mengimplementasikan function pada Latihan3.cs.


Langkah-langkahnya sebagai berikut:

1. Buka Script Latihan3.cs

Tambahkan function di dalam class Latihan3 sebagai berikut:

1.     intJumlah(int a,int b)
2.     {
3.         return a + b;
4.     }

2. Tambahkan code ini di dalam function Start()

1.         int c =Jumlah(60,40);
2.         Debug.Log("Hasil Jumlah a dan b adalah "+ c);

3. Kemudian simpan perubahan code dengan klik Ctrl+S

Sehingga pada Script Latihan3.cs sebagai berikut:

1. usingSystem.Collections;
2. usingSystem.Collections.Generic;
3. usingUnityEngine;
4.  
5. publicclassLatihan3:MonoBehaviour
6. {
7.  
8.     // Use this for initialization
9.     voidStart()
10.     {
11.         int c =Jumlah(60,40);
12.         Debug.Log("Hasil Jumlah a dan b adalah "+ c);
13.     }
14.  
15.     // Update is called once per frame
16.     voidUpdate()
17.     {
18.  
19.     }
20.  
21.     intJumlah(int a,int b)
22.     {
23.         return a + b;
24.     }
25. }

Jika dijalankan hasilnya sebagai berikut:

Praktik: Comment di Function dan Parameter

Berfungsi untuk memberi informasi tentang function yang telah dibuat

1. Ketik “/” sebanyak 3 kali diatas fungsi Jumlah() kemudian akan muncul
template comment seperti di bawah ini:

Fitur di atas hanya dapat dilakukan di Editor MonoDevelop dan Visual


Studio.
2. Pada Summary, tambahkan informasi tentang kegunaan fungsi
tersebut. Kemudian pada parameter, tambahkan informasi tentang
masing-masing parameter. Sehingga hasinya sebagai berikut:

3. Coba lakukan dengan memanggil ulang function tersebut di dalam


fungsi Start(), maka informasi yang telah dimasukkan akan muncul.

Comment ini akan sangat membantu jika kode yang kita tulis kompleks
yang karenanya kita biasa memerlukan catatan di fungsi tersebut.
Selanjutnya akan membahas tentang Class and Object

Classes and 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 mempresentasikan sebuah object. Anda dapat melihat
bagan di bawah ini.

Setiap class dapat presentasikan ke banyak object. Dengan penggunaan


prinsip di atas dapat memudahkan untuk mengelompokkan sesuatu yang
memiliki sifat yang sama. Misal dari class mobil dapat dibuat object object
seperti jazz, avansa, kijang, dll.

Setiap Object dapat memanggil Property dan Method yang memiliki


access modifier public yang terdapat di 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, Damage.


Class tersebut juga memiliki Method seperti MoveLeft(), MoveRight().
Jump() dan Attact(). Pada Object Player yang merupakan presentasi dari
Class Karakter, Anda dapat menggunakan dan mengubah nilai yang
terdapat di Properties dan dapat juga memanggil Methods yang terdapat
di Karakter.

Praktik: Membuat Class Baru Karakter

Kemudian kita akan membuat sebuah class dengan nama Karakter di


dalam Folder Latihan4

1. Buatlah Folder dengan nama Latihan4 agar script di submodul ini


tertata rapi.

Supaya script di submodul ini lebih rapi, buat dan kumpulkan scripts ke
dalam 1 Folder

2. Buka Folder Latihan4, kemudian buat script baru dengan


nama Karakter (Klik Kanan > Create > C# Script)
3. Buka script Karakter.cs dan ubah seluruh isi di dalam kelas Karakter
seperti di bawah ini.

1. usingUnityEngine;
2. publicclassKarakter{
3.  
4.  
5. }

Setiap script C#, pada bagian atas selalu diawali dengan nama Class.
Penggunaan access control class tersebut menggunakan public class
supaya ia dapat dipanggil di class lain untuk dijadikan sebagai object.
Selanjutnya, kita menghilangkan turunan dari MonoBehavior. Kenapa?
Karena pada Class ini tidak membutuhkan fungsi yang terdapat di dalam
MonoBehavior.

 Tambahkan attribute di dalam class Karakter sebagai berikut:

1.     privatestring name;
2.     privateint health;
3.     privateint damage;
4.  
5.     publicstringName
6.     {
7.         get
8.       {
9.             return name;
10.       }
11.         set
12.       {
13.             name =value;
14.       }
15.    }
16.  
17.     publicintHealth
18.     {
19.         get
20.       {
21.             return health;
22.       }
23.         set
24.       {
25.             health =value;
26.       }
27.     }
28.  
29.     publicintDamage
30.     {
31.         get
32.       {
33.             return damage;
34.       }
35.         set
36.       {
37.             damage =value;
38.       }
39.     }

 Tambahkan method sebagai berikut:

1.     publicvoidMoveLeft()
2.     {
3.         Debug.Log("Gerak ke kiri");
4.     }
5.     publicvoidMoveRight()
6.     {
7.         Debug.Log("Gerak ke kekanan");
8.     }
9.     publicvoidJump()
10.     {
11.         Debug.Log("Loncat");
12.     }
13.     publicvoidAttack()
14.     {
15.         Debug.Log("Serang");
16.     }

 Simpan perubahan pada script dengan tekan Ctrl+S

Sehingga pada script Karakter.cs sebagai berikut:

1. usingUnityEngine;
2. publicclassKarakter
3. {
4.     privatestring name;
5.     privateint health;
6.     privateint damage;
7.  
8.     publicstringName
9.     {
10.         get
11.       {
12.             return name;
13.       }
14.         set
15.       {
16.             name =value;
17.       }
18.     }
19.  
20.     publicintHealth
21.     {
22.         get
23.       {
24.             return health;
25.       }
26.         set
27.       {
28.             health =value;
29.       }
30.     }
31.  
32.     publicintDamage
33.     {
34.         get
35.       {
36.             return damage;
37.       }
38.         set
39.       {
40.             damage =value;
41.       }
42.     }
43.  
44.     publicvoidMoveLeft()
45.     {
46.         Debug.Log("Gerak ke kiri");
47.     }
48.     publicvoidMoveRight()
49.     {
50.         Debug.Log("Gerak ke kekanan");
51.     }
52.     publicvoidJump()
53.     {
54.         Debug.Log("Loncat");
55.     }
56.     publicvoidAttack()
57.     {
58.         Debug.Log("Serang");
59.     }
60. }

Praktik: Mengimplementasikan Class Karakter Sebagai


Object

Ayo kita membuat kelas baru yang nantinya akan memanggil class
Karakter sebagai object.

1. Buka Folder Latihan4 kemudian Klik Kanan pada jendela


Project > Create > C# Script > Beri nama Latihan4.cs

2. Buka script Latihan4.cs dengan klik 2 kali kemudian tambahkan kode


di bawah ini:

 Menambahkan variable dari Kelas Karakter di dalam Kelas Latihan4

1. Karakter player1;
 Menginisialisasi player1 didalam function Start()

1. player1 =newKarakter();
2. player1.Name="Dico";
3. player1.Health=100;
4. player1.Damage=30;
5. //Menampilkan hasil dari inisialisasi attribute
6. Debug.Log("Name: "+player1.Name+", Health: "+player1.Health+",
Damage: "+player1.Damage);
7. //Memanggil method dari salah satu method di class Karakter.
8. player1.Jump();
 Simpan perubahan script dengan tekan Ctrl+S

Sehingga pada script PlayerController.cs sebagai berikut:

1. usingSystem.Collections;
2. usingSystem.Collections.Generic;
3. usingUnityEngine;
4.  
5. publicclassLatihan4:MonoBehaviour
6. {
7.     Karakter player1;
8.     // Use this for initialization
9.     voidStart()
10.     {
11.         player1 =newKarakter();
12.         player1.Name="Dico";
13.         player1.Health=100;
14.         player1.Damage=30;
15.         //Menampilkan hasil dari inisialisasi attribute
16.         Debug.Log("Name: "+ player1.Name+", Health: "+ player1.Health+",
Damage: "+ player1.Damage);
17.         //Memanggil method dari salah satu method di class Karakter.
18.         player1.Jump();
19.     }
20.  
21.     // Update is called once per frame
22.     voidUpdate()
23.     {
24.  
25.     }
26. }

3. Drag and Drop script Latihan4.cs ke GameObject Main


Camera di Hierarchy
4. Hilangkan centang pada Latihan 3

Sehingga ketika dijalankan, hasilnya sebagai berikut:


Jendela Console menampilkan log informasi dari Attribute function dan
dari function  jump.

Selanjutnya akan membahas tentang Inherintance

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.

1. usingSystem.Collections;
2. usingSystem.Collections.Generic;
3. usingUnityEngine;
4.  
5. publicclassKosongan:MonoBehaviour
6. {
7.     // Use this for initialization
8.     voidStart()
9.     {
10.  
11.     }
12.  
13.     // Update is called once per frame
14.     voidUpdate()
15.     {
16.  
17.     }
18. }

Berikut ini adalah ilustrasi pada kelas turunan.

Misalnya, jika kelas A memiliki method SeniLukis() dan Menyanyi(),


kemudian B merupakan turunan dari kelas A, sehingga kelas B memiliki
method yang sama dengan kelas A.

Kemudian pada Base Class (Kelas Dasar) dapat diturunkan kebeberapa


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 variable dari base kelas (kelas
dasar) ke kelas yang lain
Kemudian ada 3 access modifier untuk menentukan apa saja function
yang dapat diturunkan atau tidak dengan 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 feature pada method, property atau variable yang
tidak dapat diturunkan kepada kelas yang diwariskan tetapi tidak dapat
diakses oleh kelas yang bukan turunannya.

Praktik: Membuat Kelas Base

Kemudian kita akan membuat sebuah kelas dengan nama Manusia

1. Buatlah Folder dengan nama Latihan5 agar script di submodule ini


tertata rapi
2. Buka folder Latihan5, kemudian buat script baru dengan
nama Manusia (Klik Kanan > Create > C# Script > Beri
nama Manusia)

3. Buka script Manusia.cs dengan klik 2 kali dan tambahkan kode di


dalam Kelas Manusia di bawah ini:

1.     publicvoidMakan(){
2.         Debug.Log("Perlu Makan");
3.     }
4.     publicvoidTidur(){
5.         Debug.Log("Perlu Tidur");
6.     }

Kemudian simpan perubahan dengan tekan Ctrl+S

Sehingga tampak sebagai berikut:

1. usingSystem.Collections;
2. usingSystem.Collections.Generic;
3. usingUnityEngine;
4.  
5. publicclassManusia:MonoBehaviour
6. {
7.     publicvoidMakan()
8.     {
9.         Debug.Log("Perlu Makan");
10.     }
11.     publicvoidTidur()
12.     {
13.         Debug.Log("Perlu Tidur");
14.     }
15. }

Praktik: Membuat Kelas Turunan

Selanjutnya membuat Kelas Turunan untuk mengimplementasikan Kelas


Manusia sebagai kelas Base.

1. Buka Folder Latihan5, kemudian buat script baru dengan


nama Prajurit (Klik Kanan > Create > C# Script > Beri
nama Prajurit.cs)

2. Sesuaikan dengan code di bawah ini:

 Ganti kelas turunan dari MonoBehaviour menjadi Manusia

1. publicclassPrajurit:Manusia
 Tambahkan method ini di dalam kelas Prajurit

1. voidMenyerang(){
2.         Debug.Log("Menyerang");
3.     }
 Tambahkan kode ini di dalam method Start()

1. Debug.Log("Seorang Prajurit dapat : ");


2.         Makan();
3.         Tidur();
4.         Menyerang();
 Kemudian Simpan perubahan dengan tekan Ctrl+S

Sehingga seluruhnya seperti berikut:

1. usingSystem.Collections;
2. usingSystem.Collections.Generic;
3. usingUnityEngine;
4.  
5. publicclassPrajurit:Manusia
6. {
7.     voidStart()
8.     {
9.         Debug.Log("Seorang Prajurit dapat : ");
10.         Makan();
11.         Tidur();
12.         Menyerang();
13.     }
14.  
15.     voidUpdate()
16.     {
17.  
18.     }
19.  
20.     voidMenyerang()
21.     {
22.         Debug.Log("Menyerang");
23.     }
24. }

3. Drag and Drop Script Prajurit.cs ke GameObject Main Camera di


Hierarchy
4. Hilangkan centang pada script Latihan 4

Ketika dijalankan sebagai berikut:


Sehingga Prajurit selain dapat mengakses Menyerang(), juga memiliki
sifat Manusia seperti Makan() dan Tidur();

Selanjutnya akan membahas tentang Array

Array 
Jika Anda terbiasa menggunakan bahasa Java, mungkin akan sedikit
bingung dengan penulisan Array di C#. Perbedaannya Anda dapat pelajari
di pembahasan ini.

Array digunakan untuk menyimpan tipe data sejenis yang dikelompokkan


sebagai satu kesatuan. Seperti contoh di bawah ini:

Dengan menyimpan tipe data integer dengan 5 data yaitu 50, 20, 30, 10,
dan 40. Data tersebut dapat diakses oleh nomor index misal untuk
mendapatkan nilai data 10 pada index 3 maka dapat ditulis myArray[3].
Sedangkan beberapa latihan tentang array seperti berikut:

  Single Dimension Arrays


Menyimpan banyak nilai dalam satu variable
Misal:

1. int[] intArray;// Deklarasi Array


2.  
3.     voidStart(){
4.         intArray =newint[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.  
11.     } 

 Multi-Dimensional Arrays
Berikut ini contoh array dengan 2 Dimensi. Untuk array 2 dimensi untuk
mendapatkan sebuah nilai, maka diperlukan 2 buah nilai misal Baris ke 4
dan Kolom ke 3.
Misal:

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


2.  
3.     voidStart(){
4.         intArray2 =newint[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.  
11.     } 

 Jagged Arrays
Bisa dikatakan array di dalam array
Misal:

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


2.  
3.     voidStart(){
4.         intArray3 =newint[2][];// Inisialisasi Element
5.  
6.         intArray3[0]=newint[2];// Inisialisasi Array
7.         intArray3[1]=newint[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 dapat dilihat di sini:

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

Praktik: Membuat Script Baru (Latihan6.cs)

Untuk memudahkan pembelajaran, buat script baru dengan nama


Latihan6.cs

1. Buat C# Script baru dengan klik kanan pada jendela Project


> Create > C# Script > Langsung beri nama Latihan6
2. Drag script Latihan6.cs ke GameObject Main Camera di
Jendela Hierarchy

Supaya script Latihan6.cs dijalankan oleh Main Camera ketika


menjalankan Play Mode.

3. Klik GameObject Main Camera di Hierarchy, Kemudian lihat


Jendela Inspector. Lalu hilangkan centang pada script Prajurit.cs
Dengan ini, Main Camera akan menjalankan script Latihan 6, bukan script
Prajurit 

4. Buka script Latihan6 kemudian ubahlah script seperti dibawah ini:

 Tambahkan kode ini di dalam class Latihan6

1. int[] intArray;// Deklarasi Array


 Tambahkan kode ini di dalam function Start()

1.         intArray =newint[4];// Inisialisasi Array


2.         intArray[0]=10;// Memasukkan nilai Array
3.         intArray[1]=20;
4.         intArray[2]=30;
5.         intArray[3]=40;
6.         Debug.Log("Menampilkan Seluruh Array");
7.         foreach(int a in intArray){
8.             Debug.Log(a);
9.         }
10.         Debug.Log("Nilai Index ke 2 adalah "+intArray[2]);

Sehingga tampil sebagai berikut:

1. usingSystem.Collections;
2. usingSystem.Collections.Generic;
3. usingUnityEngine;
4.  
5. publicclassLatihan6:MonoBehaviour
6. {
7.     int[] intArray;// Deklarasi Array
8.     // Use this for initialization
9.     voidStart()
10.     {
11.         intArray =newint[4];// Inisialisasi Array
12.         intArray[0]=10;// Memasukkan nilai Array
13.         intArray[1]=20;
14.         intArray[2]=30;
15.         intArray[3]=40;
16.         Debug.Log("Menampilkan Seluruh Array");
17.         foreach(int a in intArray)
18.         {
19.             Debug.Log(a);
20.         }
21.         Debug.Log("Nilai Index ke 2 adalah "+ intArray[2]);
22.     }
23.  
24.     // Update is called once per frame
25.     voidUpdate()
26.     {
27.  
28.     }
29. }

Jika dijalankan sebagai berikut:

Praktik: Array dan Inspector


Kita selain dapat menginisialisasi Array di dalam script, Kita juga dapat
menginisialisasi Array di dalam Inspector.

1. Buka script Latihan6.cs dan ubah sebagai berikut:

1. int[] intArray;

menjadi

1. publicint[] intArray;

Sehingga script pada Latihan6.cs sebagai berikut:

1. usingSystem.Collections;
2. usingSystem.Collections.Generic;
3. usingUnityEngine;
4.  
5. publicclassLatihan6:MonoBehaviour
6. {
7.  
8.     publicint[] intArray;// Deklarasi Array
9.  
10.     // Use this for initialization
11.     voidStart()
12.     {
13.         Debug.Log("Menampilkan Seluruh Array");
14.         foreach(int a in intArray)
15.         {
16.             Debug.Log(a);
17.         }
18.         Debug.Log("Nilai Index ke 2 adalah "+ intArray[2]);
19.     }
20.  
21.     // Update is called once per frame
22.     voidUpdate()
23.     {
24.  
25.     }
26. }

2. Kembali ke Unity dan Klik GameObject Main Camera. Kemudian pada


Inspector. klik icon panah pada field IntArray
3. Masukkkan Size 5 dan masukkan ke-5 angka tersebut

Sehingga dijalankan sebagai berikut:

Simpan Project Anda dengan tekan Ctrl+S atau klik Menu File >


pilih Save Scenes. Kemudian simpan dengan nama Main.unity

Anda dapat mengunduh project pada modul ini: BasicScripting.zip

Selanjutnya Quiz Sederhana


Pertanyaan:
Dimana sajakah yang dapat digunakan untuk membuat script baru di
Unity

Jawaban Anda
 3, 4, 5

 1, 4, 5

 2, 4, 5

 1, 2, 5

 1, 3, 4

Pengenalan Game Pukul Bola


Game Pukul Bola adalah video game seperti tenis meja yang terdiri dari
dua pemukul dan satu bola yang dapat dimainkan oleh dua orang pemain
atau dengan melawan komputer. Setiap pemain harus bisa
mengembalikan setiap bola yang mengarah padanya. Setiap lawan yang
gagal menerima bola maka kita akan mendapatkan satu poin. Sampai
batas poin tertentu, kita akan menjadi pemenangnya.
Modul ini kamu akan belajar tentang UI, Physics
2D, Transform, Material Physics, Music dan Sound.

Praktik: Membuat Project Baru

1. Buka Unity

2. Klik New

3. Masukkan nama Project yang diinginkan, misal dengan nama


"Pong2D"

4. Centang/pilih 2D 

5. Pilih tempat di mana project tersebut akan disimpan

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


Analytics”

7. Klik tombol “Create project”

Beberapa Modul yang akan Dipelajari Adalah

Setalah Anda membuat file project, selanjutnya Anda akan mempelajari


beberapa modul sebagai berikut:

 Memasukkan Assets
 Membuat Area Game
 Membuat Paddle (Pemukul)
 Membuat Bola
 Menambahkan Audio
 Membuat Score
 Membuat Halaman Game Over dan Halaman Menu

Selanjutnya akan Membahas tentang Memasukkan Aset

Memasukkan Aset 
Menyiapkan Assets

Untuk mendukung permainan, dibutuhkan 2 gambar yaitu Lingkaran dan


persegi.

Dengan detail sebagai berikut:

Lingkaran

 Nama              : Lingkaran.png
 Ukuran            : 64x64 pixel
 Warna             : Putih
 Keterangan     : Lingkaran penuh dengan warna putih

Gambar ini akan digunakan sebagai bola

Persegi

 Nama              : Persegi.png
 Ukuran            : 64x64 pixel
 Warna             : Putih
 Keterangan     : Blok penuh dengan warna putihGambar ini akan
digunakan sebagai Paddle dan WallAnda dapat membuat sendiri, Tool free
yang dapat Anda gunakan:

https://www.getpaint.net/
Anda dapat Unduh kedua gambar disiniUnduh Aset Game Pukul Bola

Praktik:  Membuat Folder

Supaya penyusunannya rapi maka perlu pengelompokan berdasarkan


jenis berkas (file) yang sama dalam satu folder. Caranya dengan buka
panel Project, kemudian klik kanan pilih Create > Folder. Beri
nama Images. 

Anda juga dapat mengganti nama folder dengan klik kali pada nama
folder maka tunggu beberapa saat kemudian muncul edit teks pada nama
folder atau Anda juga dapat dengan klik Folder kemudian tekan F12 pada
keyboard.  

Praktik: Memasukkan Asset ke Project

Gambar-gambar yang telah kita buat/unduh, selanjutnya kita masukkan


aset ke proyek. Langkah-langkahnya sebagai berikut:

1. Masuk kedalam folder Images yang telah dibuat dengan klik 2 kali.
Kemudian klik kanan > Import New Asset…
 

2. Kemudian masuk kedua gambar Lingkaran dan Persegi (Ctrl+A) dan


klik Import.

3. Setelahnya, muncul di kedua gambar seperti di bawah ini


Praktik: Simpan Scene

Scene merupakan wadah yang menampung GameObject atau semua


hal yang kita butuhkan. Satu Scene dapat dipandang sebagai satu level
atau satu screen/tampilan dari sebuah object.

Setelah membuat Project untuk pertama kali, Pada panel Hierarchy,


terdapat sebuah Scene (Untitled) yang memiliki satu Main Camera.

Scene yang pertama kali dibuat ini belum tersimpan. Untuk menyimpan
Scene, ikuti langkah-langkah berikut:

1. Buka Panel Project, kemudian buat folder baru dengan nama Scenes


2. 
Untuk menyimpan dan memberi nama Scene pertama kali, klik kanan
pada Scene Untitled, lalu pilih Save Scene As

3. Masuk ke folder Scenes. Kemudian beri nama Main, lalu tekan


tombol Save
4. Setelah berhasil, pada Folder Scenes muncul berkas baru dengan
nama Main.unity.

  

Selanjutnya kita akan membahas tentang Membuat Background

Membuat Background

Praktik: Menentukan Resolusi yang digunakan

Sebelum menyusun sebuah tampilan, sebaiknya tentukan terlebih dahulu


resolusi yang digunakan. Karena target platform adalah Android, maka
kita menggunakan resolusi 16:9. Pengaturan tersebut, dapat Anda
lakukan dengan dengan membuka panel Game. Kemudian Pilih Resolusi
16:9
Anda juga dapat menambahkan resolusi tertentu dengan menekan tombol
plus (+).

Sehingga tampilan menjadi seperti berikut ini:

Praktik: Mengubah Warna Background

Kamu dapat melihat komponen-komponen dari sebuah GameObject


dengan cara klik pada GameObject yang ingin dilihat. Lalu lihat
pada Inspector. Coba klik dua kali pada Main Camera, lalu lihat bagian
Inspector dari Main Camera. Komponen apa sajakah yang dimiliki oleh
Main Camera?
Default warna latar belakang adalah biru tua. Untuk mengubah warnanya,
klik dua kali pada Background di komponen Camera. Kemudian akan
terbuka color picker untuk memilih warna background yang diinginkan. Di
pembelajaran ini kita menggunakan warna hitam sebagai background.
Sehingga hasilnya seperti berikut ini:
Hasilnya sebagai berikut:
Selanjutnya akan Membahas tentang Membuat Area Game

Membuat Area Game


Pertama kita rumuskan dulu gambar apa saja yang diperlukan
dalam Membuat Area Game Pukul Bola.

Berikut ini gambar-gambar yang kita butuhkan:

1. Garis tepi atas, 


2. Garis tepi bawah, 
3. Garis tepi kiri,
4. Garis tepi kanan, dan
5. Garis batas tengah
Garis atas, bawah, kiri, kanan memiliki sifat tidak dapat ditembus oleh
bola sedangkan untuk batas tengah dapat ditembus oleh bola

Untuk semua gambar, kita akan menggunakan GameObject


berupa Sprite. Sprite adalah sebuah object 2D yang digunakan untuk
karakter, peluru, elemen, di permainan 2D. Untuk menampilkan gambar
tersebut, dibutuhkan Komponen SpriteRenderer di sebuah GameObject.

Untuk menyusun Object, Anda dapat menggunakan toolbox yang telah


disediakan

Dengan tool tersebut, Anda dapat melakukan menggerakkan, memutar


atau mengatur besar kecil object. Anda juga dapat mengatur nilai pada
Komponen Transform di Panel Inspector.

Semua tahapan akan dibahas di bawah ini.

Praktik: Membuat Tepi dan Garis Pembatas Tengah

Selanjutnya kita akan membuat Tepi dan Garis Pembatas Tengah sebagai
area game. Langkah pertama kita akan membuat Tepi Atas terlebih
dahulu dengan langkah-langkah sebagai berikut:

1. Drag gambar Persegi dan letakkan ke Panel Scene.


2. Ubahlah nama Persegi menjadi TepiAtas dengan klik kanan pada
GameObject Persegi dan pilih Rename.

3. Aturlah Posisi dan Scala sebagai berikut

 Posisi X:0, Y:4.5 dan Z:0


 Skala X:26.8, Y:0.3 dan Z:1

Sehingga terlihat sebagai berikut:


            Biar lebih menarik, Anda dapat mengubah warna pada Sprite
Renderer dan pilih warna yang Anda suka, contohnya seperti gambar di
bawah ini

4. Kemudian buatlah hal yang sama


seperti TepiAtas untuk TepiBawah, TepiKanan, TepiKiri dan BatasTe
ngah. Dengan detail sebagai berikut:

TepiBawah

 Posisi X:0, Y:-4.5 dan Z:0


 Skala X:26.8, Y:0.3 dan Z:1

TepiKanan

 Posisi X:8.5, Y:0 dan Z:0


 Skala X:0.3, Y:14.37 dan Z:1

TepiKiri

 Posisi X:-8.5, Y:0 dan Z:0


 Skala X:0.3, Y:14.37 dan Z:1

BatasTengah

 Posisi X:0, Y:0 dan Z:0


 Skala X:0.1, Y:14.37 dan Z:1

Berikut ini cara untuk menambahkan TepiBawah:

 Klik kanan pada Tepi Atas


 Pilih Duplicate
 Rename TepiAtas (1) menjadi TepiBawah
 Atur Pos Y menjadi -4.5

Selanjutnya, tambahkan tepi kiri, tepi kanan, dan batas tengah


dengan cara yang sama. Atur ukuran dan posisi tepi kiri, tepi kanan,
dan batas tengah. Setelah semua tepi dan batas ditambahkan, hasilnya
sebagai berikut:

Praktik: Menambahkan Collision pada Tepi

Setelah Anda selesai membuat tampilan Area Game, selanjutnya Anda


menambahkan Collider sebagai pembatas area agar bola tidak dapat
tembus keluar area. Langkah-langkahnya sebagai berikut.
1. Klik GameObject TepiAtas yang terdapat di Hierarchy

2. Pada Panel Inspector, Tambahkan Komponen Collision dengan klik Add


Component > Physics 2D > Box Collider 2D

3. Lakukan hal yang sama seperti GameObject TepiAtas pada


GameObject TepiBawah, TepiKanan dan TepiKiri. Anda dapat
menambahkan Collider secara bersamaan dengan blok ketiga gameobject
di Hierarchy. Kemudian tambahkan Component Collider.

Sekarang Anda sudah selesai membuat Area Game dan siap untuk
digunakan. 

Selanjutnya akan Membahas tentang Membuat Paddle

Membuat Paddle (Pemukul)


Segala hal yang berada pada Scene atau Hierarchy bertipe GameObject.
GameObject dapat dipandang sebagai wadah dari
berbagai Components (komponen). Fungsionalitas dari sebuah
GameObject dibentuk dari komponen-komponennya. Secara default,
GameObject akan memiliki sebuah komponen
yaitu Transform. Transform memiliki beberapa atribut, yaitu:

 Position. Menandakan posisi dalam sumbu X, Y, dan Z.


 Rotation. Menandakan rotasi pada sumbu X, Y, dan Z dalam satuan
derajat.
 Scale. Menandakan skala ukuran pada sumbu X, Y, dan Z. Nilai 1 adalah
ukuran asli.

Setiap Component memiliki centang di sebelah namanya untuk


memungkinkan Component di-enable atau di-disable. Component yang
di-disable dianggap tidak muncul atau tidak digunakan.

Di submodul ini kita akan membuat Paddle yang bergerak ke atas dan ke
bawah dengan menekan tombol keyboard.

Praktik: Membuat GameObject Paddle (Pemukul)


Selanjutnya kita akan membuat Paddle sebagai player. Langkah-
langkahnya sebagai berikut:

1. Masukkan Persegi ke Scene, Kemudian ubah
Nama Persegi menjadi Pemukul1

2. Kemudian Atur posisi dan Skala sebagai berikut:

 Position: X: -7.5, Y:0 dan Z:0


 Scale : X: 0.5, Y:5 dan Z:1

Sehingga hasilnya sebagai berikut:


3. Ubah warna sesuai keinginan. Misal Anda mengubah warna menjadi
biru

4. Karena Paddle merupakan objek yang tidak dapat ditembus oleh objek
lain maka tambahkan Komponen Collision dengan cara Klik Add
Component > Physics 2D > Box Collider 2D
Objek paddle sudah siap. Selanjutnya Membuat pemukul (Paddle)
bergerak.

Praktik: Membuat Pemukul Bergerak

Dalam tutorial ini, kedua paddle akan digerakkan dengan menggunakan


keyboard. Pemukul pemain pertama (sebelah kiri) digerakkan dengan
tombol W dan S sementara Pemukul pemain kedua (sebelah kanan)
digerakkan dengan tombol ↑ dan ↓. Lakukan langkah berikut untuk
setting input:

1. Buka InputManager (Klik Edit > Project Settings > Input). Karena
kita akan menambahkan varian input baru, edit
field Size pada Axes dari 18 menjadi 20
Setelah diubah sizenya maka muncul 2 tambahan baru dengan
nama Cancel.

2. Untuk dua varian input terbawah, ikuti setting pada screenshot berikut
Tips: di versi Unity yang terbaru, jika Anda mengedit yang sudah ada
misal Vertical maka akan muncul error.
Dari sini, kita memiliki 2 varian customized input

 Vertical 1
Ini akan digunakan untuk menggerakkan Pemukul dari player 1. Pemukul
dari player 1 akan digerakkan ke bawah (negative button) dengan
tombol s dan bergerak ke atas (positive button) dengan tombol w.
 Vertical 2
Ini akan digunakan untuk menggerakkan Pemukul dari player 2. Pemukul
dari player 2 akan bergerak ke bawah (negative button) dengan
tombol   (down) dan bergerak ke atas (positive button) dengan
tombol ↑ (up).

Praktik: Script dan Variable

Selanjutnya, kita perlu membuat Script agar Pemukul dapat bergerak


sesuai dengan masukan dari keyboard.

1.  Pada Folder Assets, Tambahkan Folder baru. Klik Kanan pada Panel


Project, kemudian pilih Create > Folder lalu beri nama Scripts
2. Di dalam folder Scripts yang telah dibuat, tambahkan script baru
dengan nama PaddleController.cs. (Klik kanan > Create > C#
Scripts)

3. Pada script PaddleController.cs, Klik dua kali pada file


“ PaddleController.cs” untuk mulai menambahkan script. Setiap Script
pada Unity merupakan turunan dari kelas MonoBehaviour, sehingga
semua fungsi dan prosedur yang ada pada kelas MonoBehaviour dapat
dimanfaatkan pada script.

Pada game Pong, script yang perlu ditambahkan perlu mengatur:

 kecepatan pergerakan Paddle/Pemukul
 varian input mana yang mengatur paddle tersebut: Vertical
1 atau Vertical 2
 perubahan posisi pada sumbu Y sesuai dengan tombol yang ditekan

Berikut ini merupakan contoh script yang lengkap.

 Tambahkan variabel di dalam class Paddle Controller

 public float kecepatan;


public string axis;
 Tambahkan kode didalam function Update

 float gerak = Input.GetAxis(axis) * kecepatan * Time.deltaTime;


transform.Translate(0, gerak, 0);

 Simpan perubahan dengan Ctrl+S sehingga seluruh Code sebagai berikut:

 using UnityEngine;
 public class PaddleController : MonoBehaviour {
   public float kecepatan;
   public string axis;
   // Use this for initialization
   void Start () {
  }
   // Update is called once per frame
   void Update () {
   float gerak = Input.GetAxis(axis) * kecepatan * Time.deltaTime;
   transform.Translate(0, gerak, 0);
  }
}
Pembahasan

public float kecepatan;


public string axis;
Dalam script di atas, terdapat dua variabel yang bersifat public,
yaitu kecepatan (kecepatan pergerakan) dan axis(untuk mengatur
input keyboard). Variabel yang bersifat public ini akan muncul
sebagai field yang bisa diganti isinya tanpa harus mengubah kode.

float gerak = Input.GetAxis(axis) * kecepatan * Time.deltaTime;


Untuk memperoleh seberapa besar untuk pergerakan paddle dari
Input.GetAxis yang memperoleh nilai diantara -1 sampai 1 yang
dikalikan kecepatan dan selisih waktu (Time.deltaTime) supaya
dapat berjalan dengan baik di berbagai perangkat.

transform.Translate(0, gerak, 0);


Implementasi perpindahan terdahap Paddle

4. Masukkan script PaddleController.cs yang telah dibuat ke dalam


GameObject Pemukul1. Anda dapat lakukan dengan melakukan drag dan
drop.
5. Buka Inspector pada Pemukul1 kemudian pada field Kecepatan diisi
nilai 7 dan pada Axis diisi “Vertical1”

Dalam screenshot di atas, Kecepatan diisi dengan 7, sementara Axis diisi


dengan Vertical1. Hal ini berarti, kecepatan perpindahan adalah 7 dikali
hasil pembacaan keyboard. Sementara untuk memindahkan pemukul
akan digunakan varian input Vertical 1, yaitu w untuk perpindahan ke
atas dan s untuk perpindahan ke bawah. Pada saat di-play, dengan
menekan tombol w dan s, pemukul player 1 akan bergerak sebagai
berikut.

Dari gif di atas, Pemukul bergerak secara vertical ketika ditekan


tombol w dan s.

Praktik: Memberi batasan atas dan bawah 

Dalam pemrograman, seringkali kita perlu mengatur sesuatu berdasarkan


kondisi tertentu. Misalnya dalam kasus Pemukul, perpindahan posisi
Pemukul perlu dibedakan berdasarkan state dari Pemukul tersebut.
Berikut ini logika kondisi yang digunakan dalam pengaturan posisi
Pemukul.

 Apabila nilai yang diinputkan melebihi batas atas maka nilai inputan
menjadi 0 berarti GameObject pemukul tidak bergerak
 Apabila nilai yang diinputkan kurang dari batas bawah maka nilai inputan
menjadi 0 berarti GameObject pemukul tidak bergerak
 Apabila pemukul berada dalam batas bawah dan batas atas maka
pemukul bebas untuk berpindah ke mana pun.

Untuk mengimplementasikannya, langkah-langkah sebagai berikut:

1. Buka script PaddleController.cs dengan klik 2 kali, kemudian


tambahkan code di bawah ini.

 Tambahkan code di dalam class PaddleController

 public float batasAtas;


public float batasBawah;

 Tambahkan code pengecekan di dalam function Update()

 float nextPos = transform.position.y + gerak;


 if (nextPos > batasAtas ) {
   gerak = 0;
 }
 if (nextPos < batasBawah)
 {
   gerak = 0;
}

Simpan perubahan dengan tekan Ctrl+S, sehingga seluruh script sebagai


berikut:

using UnityEngine;
public class PaddleController : MonoBehaviour
{
  public float batasAtas;
  public float batasBawah;
  public float kecepatan;
  public string axis;
  // Use this for initialization
  void Start ()
 {
 }
  // Update is called once per frame
  void Update ()
 {
  float gerak = Input.GetAxis (axis) * kecepatan * Time.deltaTime;
  float nextPos = transform.position.y + gerak;
  if (nextPos > batasAtas) {
  gerak = 0;
 }
  if (nextPos < batasBawah) {
  gerak = 0;
 }
  transform.Translate (0, gerak, 0);
 }
}

Memprediksi nilai posisi posisi selanjutnya apakah menewati batas atas


atau batas bawah. Jika melewati maka paddle tidak ada pergerakkan
selanjutnya.

2. Untuk mengetahui batasAtas dan batas bawah, Anda dapat lakukan


dengan menggeser paddle ke posisi paling atas. Anda dapat lihat nilai Y
pada komponen Transfrom
Kita telah mendapatkan nilai batas atas yaitu sebesar 3.45, sedangkan
untuk nilai batas bawah adalah nilai negatif dari 3.45 yaitu -3.45. Setelah
mendapatkan nilai tersebut, jangan lupa untuk mengembalikan posisi
semula pada paddle dengan nilai y sama dengan 0.

3. Kemudian isikan kedua nilai tersebut pada filed Batas Atas dan Batas
Bawah. 
Ketika dijalankan sebagai berikut:

4. Kemudian buatlah paddle lawan. Anda dapat lakukan dengan duplikat


GameObject Pemukul1 di Hierarchy dengan nama Pemukul2. Lalu atur
posisi x menjadi 7.5. Ubah warna menjadi yang berbeda. Atur juga nilai
Axis menjadi Vertical2. Sehingga tampil sebagai berikut:

Sekarang Anda sudah dapat membuat paddle yang dapat bergerak ke


atas dan ke bawah tanpa menembus dinding.
Selanjutnya: Membuat Bola

Membuat Bola
Di submodul ini, kita akan menerapkan 2D Physics ke Bola, antara lain
sebagai berikut:

 RigidBody 2D, Sebuah komponen yang menerapan hukum fisika pada


suatu gameobject 2D.
 Collider 2D, sebuah komponen yang menggambarkan bentuk sebuah
fisik yang dapat digunakan untuk mendeteksi benturan dengan benda
lain.
 Physics Material 2D, digunakan untuk mengatur nilai gesekan atau
pantulan terhadap benturan benda lain.

Praktik: Membuat Objek Bola

Pertama, kita membuat objek Bola terlebih dahulu dengan cara sebagai
berikut:

Masukkan gambar Lingkaran yang terdapat di panel Project ke


panel Hierarchy. Kemudian ubah nama menjadi Bola. Atur posisi x,y dan
z menjadi 0.

Praktik: Menambahkan Physics 2D pada Bola

Setelah objek bola dibuat, kemudian tambahkan komponen bola.


1. Buka Inspector pada Bola, Lalu tambahkan komponen RigidBody
2D (Add Component > Physics 2D > Rigidbody 2D). Kemudian atur
nilai Linear Drag, Angular Drag, Gravity Scale menjadi 0. Jangan lupa
untuk centang Freeze Rotation Z.

2. Tambahkan komponen Circle Collider 2D (Add


Component > Physics 2D > Circle Collider 2D).

3.Buat folder baru dengan nama Physics. Kemudian buat Physics


Material 2D dengan klik kanan pada panel Project > Create > Physics
Material 2D dan beri nama PhysicsBola.
4. Klik PhysicsBola pada panel Project. Kemudian pada Inspector, atur
nilai sebagai berikut. Friction menjadi 0 dan Bounciness menjadi 1.

5. Terakhir, drag PhysicsBola dan drop ke field Material di


Inspector Bola.
Praktik: Menambahkan Code

Kali ini, kita akan mencoba menggerakkan Bola dengan menggunakan


Force (tekanan). Seperti dalam hukum Fisika, kecepatan dan arah
pergerakan Bola ditentukan oleh dua hal:

 Arah dan besaran Force (tekanan)
 Massa bola

Force dalam Unity ditambahkan pada Rigidbody 2D. Dalam tutorial ini,
kita mencoba menambahkan Force sebagai pergerakan Bola pertama kali.
Berikut ini langkah-langkahnya.

1. Buat Script C# baru didalam folder Scripts dengan


nama BallController.cs. Kemudian tambahkan code di bawah ini.

 Tambahkan 2 variable pada class BallController.

1. publicint force;
2.     Rigidbody2D rigid;

 Tambahkan code ini di dalam function Start()

1. rigid =GetComponent<Rigidbody2D>();
2.             Vector2 arah =newVector2(2,0).normalized;
3.             rigid.AddForce(arah * force );
 Simpan dengan tekan Ctrl+S

Sehingga seluruh kode sebagai berikut:

1. usingUnityEngine;
2. publicclassBallController:MonoBehaviour
3. {
4.   publicint force;
5.   Rigidbody2D rigid;
6.   // Use this for initialization
7.   voidStart()
8.   {
9.   rigid =GetComponent<Rigidbody2D>();
10.   Vector2 arah =newVector2(2,0).normalized;
11.   rigid.AddForce(arah * force);
12.   }
13.   // Update is called once per frame
14.   voidUpdate()
15.   {
16.   }
17. }

Pembahasan

1. publicint force;

Dengan lewat inspector, nilai di atas untuk mengatur kecepatan


gerak bola.

1. Rigidbody2D rigid;

Menyimpan variable rigidbody yang dapat dipanggil sewaktu-


waktu

1. rigid =GetComponent<Rigidbody2D>();

Memanggil komponen Rigidbody2D ke dalam script.

1. Vector2 arah =newVector2(2,0).normalized;

Menyatakan arah dari Force, yaitu 2 satuan ke kanan dan 0 satuan


ke atas.

1. rigid.AddForce(arah * force);

Melontarkan bola sesuai dengan arah dan kekuatan.


2. Masukkan Script BallController.cs ke GameObject Bola yang terdapat
di Hierarchy. Kemudian Atur nilai Force menjadi 200.

Jika dijalankan sebagai berikut:

Praktik: Menambahkan Reset Bola

Saat bola menyentuh tepi kanan dan tepi kiri, bola kembali ke posisi start.
Jika bola mati di sebelah kanan maka bola akan mengarah ke kanan.
Begitupun sebaliknya, jika bola mati di sebelah kiri maka bola akan
mengarah ke kiri. Langkah-langkahnya sebagai berikut:
1. Buka Script BolaController.cs dengan klik 2 kali. Lalu tambahkan code
sebagai berikut:

 Tambahkan function di class BolaController

1. voidResetBall()
2.  {
3.   transform.localPosition =newVector2(0,0);
4.   rigid.velocity =newVector2(0,0);
5.  }
 Tambahkan function OnCollisionEnter2D di class BolaController

1.  privatevoidOnCollisionEnter2D(Collision2D coll)
2.   {
3.   if(coll.gameObject.name =="TepiKanan"){
4.   ResetBall();
5.   Vector2 arah =newVector2(2,0).normalized;
6.   rigid.AddForce(arah * force);
7.   }
8.   if(coll.gameObject.name =="TepiKiri"){
9.   ResetBall();
10.   Vector2 arah =newVector2(-2,0).normalized;
11.   rigid.AddForce(arah * force);
12.   }
13.   }

 Simpan perubahan dengan tekan Ctrl+S

Sehingga seluruh code sebagai berikut:

1. usingUnityEngine;
2. publicclassBallController:MonoBehaviour
3. {
4.   publicint force;
5.   Rigidbody2D rigid;
6.   // Use this for initialization
7.   voidStart()
8.   {
9.   rigid =GetComponent<Rigidbody2D>();
10.   Vector2 arah =newVector2(2,0).normalized;
11.   rigid.AddForce(arah * force);
12.   }
13.   // Update is called once per frame
14.   voidUpdate()
15.   {
16.   }
17.   privatevoidOnCollisionEnter2D(Collision2D coll)
18.   {
19.   if(coll.gameObject.name =="TepiKanan"){
20.   ResetBall();
21.   Vector2 arah =newVector2(2,0).normalized;
22.   rigid.AddForce(arah * force);
23.   }
24.   if(coll.gameObject.name =="TepiKiri"){
25.   ResetBall();
26.   Vector2 arah =newVector2(-2,0).normalized;
27.   rigid.AddForce(arah * force);
28.   }
29.   }
30.   voidResetBall()
31.   {
32.   transform.localPosition =newVector2(0,0);
33.   rigid.velocity =newVector2(0,0);
34.   }
35. }

Pembahasan

1. voidResetBall()

Function ini dibuat supaya lebih ringkas.

1. transform.localPosition =newVector2(0,0);

Memposisikan bola pada tengah-tengah area

1. rigid.velocity =newVector2(0,0);

Tanpa memberi pergerakan pada bola

1. privatevoidOnCollisionEnter2D(Collision2D coll)

Ketika Bola mendeteksi suatu object

1. if(coll.gameObject.name =="TepiKanan")

Memastikan object tersebut adalah TepiKanan

1. ResetBall();

Menjalakan seluruh code yang terdapat ResetBall yang meliputi


mengatur ulang posisi bola dan pergerakan bola.

1. Vector2 arah =newVector2(2,0).normalized;

Menentukan arah pergerakan bola. Nilai 2 berarti bola mengarah


ke kanan.
1. rigid.AddForce(arah * force);

Melontarkan bola berdasarkan arah dan kecepatan bola.

Sehingga dijalankan sebagai berikut:

Praktik: Mengatur Pantulan bola pada Paddle

Kita akan membuat sebuah pantulan berdasarkan posisi pantulan Bola


terhadap posisi Paddle. Jika bola mengenai samping/pinggir Paddle, maka
bola akan terpantul miring.
Ada beberapa hal yang perlu diperhatikan.

Pantulan berdasarkan posisi bola mengenai Paddle. Sehingga posisi titik


Paddle sebagai acuan Pantulan bola. Jika bola mengenai bagian atas
paddle maka nilainya lebih besar 0 sehingga memantul keatas dan jika
bola mengenai bagian bawah Paddle maka nilainya kurang dari 0
sehingga pantul kebawah.

Misalnya bola mengenai ujung atas Paddle yang di mana posisi y pada
bola sebesar 5 dan posisi Y pada paddle sebesar 1, maka dari kedua nilai
tersebut terdapat perbedaan 5 - 1 = 4 (lebih besar nilai 0 maka bola
dipantul keatas). Sedangkan jika posisi Y pada bola tepat dengan posisi
Paddle yaitu sama-sama 1 maka nilai selisih yang didapat adalah 0 (bola
akan dipantulkan lurus).

Maka yang akan dilakukan pada bola adalah:

 Ketika Bola mengenai Paddle maka perhatikan kedua posisi


 Hitung selisih dari kedua posisi tersebut sebagai arah lontar bola
 Sebelum melontarkan bola maka bola harus dalam keadaan diam
 Lontarkan Bola

Langkah-langkahnya sebagai berikut:


1. Buka Script BallController.cs dengan klik 2 kali. Kemudian tambahkan
code sebagai berikut:

 Tambahkan code ini di dalam function OnCollisionEnter2D(Collision2D coll)

1. if(coll.gameObject.name =="Pemukul1"|| coll.gameObject.name


=="Pemukul2")
2. {
3.   float sudut =(transform.position.y - coll.transform.position.y)*5f;
4.   Vector2 arah =newVector2(rigid.velocity.x, sudut).normalized;
5.   rigid.velocity =newVector2(0,0);
6.   rigid.AddForce(arah * force *2);
7. }
 Simpan perubahan dengan tekan Ctrl+S Sehingga seluruh code sebagai
berikut:

1. usingUnityEngine;
2. publicclassBallController:MonoBehaviour{
3.   publicint force;
4.   Rigidbody2D rigid;
5.   // Use this for initialization
6.   voidStart(){
7.   rigid =GetComponent<Rigidbody2D>();
8.   Vector2 arah =newVector2(2,0).normalized;
9.   rigid.AddForce(arah * force);
10.   }
11.   // Update is called once per frame
12.   voidUpdate(){
13.   }
14.   privatevoidOnCollisionEnter2D(Collision2D coll)
15.   {
16.   if(coll.gameObject.name =="TepiKanan")
17.   {
18.   ResetBall();
19.   Vector2 arah =newVector2(2,0).normalized;
20.   rigid.AddForce(arah * force);
21.   }
22.   if(coll.gameObject.name =="TepiKiri")
23.   {
24.   ResetBall();
25.   Vector2 arah =newVector2(-2,0).normalized;
26.   rigid.AddForce(arah * force);
27.   }
28.   if(coll.gameObject.name =="Pemukul1"|| coll.gameObject.name
=="Pemukul2")
29.   {
30.   float sudut =(transform.position.y - coll.transform.position.y)*5f;
31.   Vector2 arah =newVector2(rigid.velocity.x, sudut).normalized;
32.   rigid.velocity =newVector2(0,0);
33.   rigid.AddForce(arah * force *2);
34.   }
35.   }
36.   voidResetBall()
37.   {
38.   transform.localPosition =newVector2(0,0);
39.   rigid.velocity =newVector2(0,0);
40.   }
41. }

Pembahasan

1. if(coll.gameObject.name =="Pemukul1"||
coll.gameObject.name =="Pemukul2")

Memastikan objek yang bersentuhan dengan bola adalah


GameObject Pemukul1 dan Pemukul2

1. float sudut =(transform.position.y -


coll.transform.position.y)*5f;

Kemudian hitung seberapa kemiringan yang diberikan ke bola.

1. Vector2 arah =newVector2(rigid.velocity.x,


sudut).normalized;

Menentukan arah bola yang akan dipantulkan

1. rigid.velocity =newVector2(0,0);

Reset gerak bola (dengan code ini, bola akan diam)

1. rigid.AddForce(arah * force *2);

Implementasikan arah, kekuatan lontar dan kecepatan setelah


bola menyentuh paddle. Di bagian ini Anda dapat memodifikasi
untuk bola semakin cepat dengan menambahkan kelipatan setiap
menjalankan code ini.

Sehingga dijalankan sebagai berikut:

Jika Anda masih kurang nyaman dengan pergerakkan bola dan


pergerakkan paddle, Anda dapat buka panel Inspector pada masing
masing gameobject tersebut.

Atur kecepatan pada Paddle


Atur force untuk kekuatan lontar pada Bola

Selanjutnya akan membahas tentang Membuat Skor

Membuat Skor
Setelah gameplay sederhana dapat dimainkan, selanjutnya membuat
Skor. Di bagian ini, selain menghitung berapa skor yang diperoleh, kita
juga mempelajari tentang UI, mengatur UI, dan implementasi Font.

Apa saja yang menjadi UI

Praktik 6.1: Menambahkan Font

Penggunaan teks sangat berhubungan dengan font. Anda dapat


menggunakan berbagai model font untuk menampilkan sebuah teks. Ada
beberapa hal untuk mendapatkan sebuah font.
 Anda dapat mengunduh Font dari berbagai situs dari yang gratis dan
berbayar. Jangan lupa untuk perhatikan lisensinya sebelum menggunakan
 Anda dapat menggunakan font dari Standard Asset Unity dengan
mengimpor Utilities.
 Anda dapat membuat font sendiri dengan menggunakan tools vector
seperti Adobe illustrator, dll.

Pastikan style font sesuai dengan style game Anda. Karena game pukul
bola lebih terlihat game klasik maka kita menggunakan font pixel.

Beberapa referensi dapat untuk


disini http://www.1001fonts.com/pixel-fonts.html

Pada kelas ini, kita menggunakan font


ini http://www.1001fonts.com/joystix-font.html

Langkah-langkah sebagai berikut:

1. Setelah Anda memiliki sebuah font, Buatlah Folder baru dengan


nama Fonts

2. Tambahkan file font “joystix monospace.ttf” ke dalam folder Fonts.


(Klik kanan > Import New Asset… )

Sekarang Anda sudah memiliki font yang siap digunakan untuk UI Text
Praktik 6.2: Membuat UI Skor

Kita akan menampilkan skor yang telah diperoleh, kemudian


menampilkan skor tersebut dengan UI Text. Langkah-langkahnya adalah
sebagai berikut:

1. Tambahkan Teks baru dengan klik kanan pada Scene Main kemudian
pilih GameObject > UI > Text dan ubah nama
GameObject Text menjadi Score1.

2. Klik Canvas. Pada Inspector atur UI Scale Mode di komponen Canvas


Scaler menjadi Scale With Screen. Atur Nilai Reference Resolution
menjadi X: 1280 dan Y: 720
3. Klik Score1, kemudian pada Inspector,

 Atur nilai posisi Rect Transform menjadi Top-Center


 Atur juga nilai Pos X: -115, Pos Y: -92, Width: 230 dan Height: 131

 Pada komponen text, aturlah dengan nilai sebagai berikut:


o Text: 0
o Font: joystix monospace
o Font size: 86
o Alignment: Center - Center
o Color: Putih

Sehingga tampilan pada panel Game Seperti berikut:


4. Kemudian duplikat GameObject Score1. Kemudian ubah nama Score1
(1) menjadi Score2. Pada Inspector, Atur Pos X menjadi 115.

Praktik 7.1 Deklarasi dan Inisialisasi variable Score

Selanjutnya kita akan masuk ke scripting. Pertama, kita akan membuat


variable untuk menyimpan skor.

1. Buka Script BallController.cs. Kemudian tambahkan code sebagai


berikut:

 Tambahkan variable score untuk Pemukul1  dan Pemukul2.

1. int scoreP1;
2. int scoreP2;
 Tambahkan inisialisasi variable score di function Start()

1.     scoreP1 =0;
2.     scoreP2 =0;
 Simpan perubahan dengan tekan Ctrl+S

Praktik 7.2 Penghitungan Score dan Reset Posisi Bola

Selanjutnya pada prosedur OnCollisionEnter2D, perlu ditambahkan


kode apabila bola bertabrakan dengan tepi kiri atau tepi kanan. Kode
tersebut akan mengatur:

penambahan scoreP1 dan scoreP2

1. Tambahkan isi prosedur OnCollisionEnter sebagai berikut:

 Tambahkan code ini ketika bola menyentuh Tepi Kanan

1.             scoreP1 +=1;
 Tambahkan code ini ketika bola menyentuh Tepi Kiri

1.             scoreP2 +=1;
 Simpan perubahan dengan tekan Ctrl+S

Sehingga seluruh code sebagai berikut:

1. usingSystem.Collections;
2. usingSystem.Collections.Generic;
3. usingUnityEngine;
4. publicclassBallController:MonoBehaviour
5. {
6.   publicint force;
7.   Rigidbody2D rigid;
8.   int scoreP1;
9.   int scoreP2;
10.   // Use this for initialization
11.   voidStart()
12.   {
13.   rigid =GetComponent<Rigidbody2D>();
14.   Vector2 arah =newVector2(2,0).normalized;
15.   rigid.AddForce(arah * force);
16.   scoreP1 =0;
17.   scoreP2 =0;
18.   }
19.   // Update is called once per frame
20.   voidUpdate()
21.   {
22.   }
23.   privatevoidOnCollisionEnter2D(Collision2D coll)
24.   {
25.   if(coll.gameObject.name =="TepiKanan"){
26.   scoreP1 +=1;
27.   ResetBall();
28.   Vector2 arah =newVector2(2,0).normalized;
29.   rigid.AddForce(arah * force);
30.   }
31.   if(coll.gameObject.name =="TepiKiri"){
32.   scoreP2 +=1;
33.   ResetBall();
34.   Vector2 arah =newVector2(-2,0).normalized;
35.   rigid.AddForce(arah * force);
36.   }
37.   if(coll.gameObject.name =="Pemukul1"|| coll.gameObject.name
=="Pemukul2"){
38.   float sudut =(transform.position.y - coll.transform.position.y)*5f;
39.   Vector2 arah =newVector2(rigid.velocity.x, sudut).normalized;
40.   rigid.velocity =newVector2(0,0);
41.   rigid.AddForce(arah * force *2);
42.   }
43.   }
44.   voidResetBall()
45.   {
46.   transform.localPosition =newVector2(0,0);
47.   rigid.velocity =newVector2(0,0);
48.   }
49. }

Praktik 7.4 Menuliskan Score ke Layar

Setelah menambahkan text (Score1 dan Score2 pada Canvas), kita perlu
menampilkan score yang diperhitungan ke layar. Penambahan score
diatur dalam Script BallController.cs. Oleh karena itu, penulisan skor juga
akan ditangani dalam script ini. Langkah-langkahnya sebagai berikut:

1. Buka Script BallController.cs dengan klik 2 kali. Kemudian tambahkan


kode sebagai berikut:

 Tambahkan library UnityEngine.UI

1. usingUnityEngine.UI;
 Tambahkan Variable di dalam class BallController

1. Text scoreUIP1;
2. Text scoreUIP2;
 Tambahkan Inisialisasi variable scoreUIP1 dan scrore UIP2

1. scoreUIP1 =GameObject.Find("Score1").GetComponent<Text>();
2. scoreUIP2 =GameObject.Find("Score2").GetComponent<Text>();
 Tambahkan function di dalam class BallController

1. voidTampilkanScore()
2.   {
3.   Debug.Log("Score P1: "+ scoreP1 +" Score P2: "+ scoreP2);
4.   scoreUIP1.text = scoreP1 +"";
5.   scoreUIP2.text = scoreP2 +"";
6.   }
 Tambahkan code ini ketika penambahkan scoreP1 dan scoreP2

1. TampilkanScore();

Simpan perubahan dengan tekan Ctrl+S sehingga seluruh code menjadi


seperti berikut:

1. usingSystem.Collections;
2. usingSystem.Collections.Generic;
3. usingUnityEngine;
4. usingUnityEngine.UI;
5. publicclassBallController:MonoBehaviour
6. {
7.   publicint force;
8.   Rigidbody2D rigid;
9.   int scoreP1;
10.   int scoreP2;
11.   Text scoreUIP1;
12.   Text scoreUIP2;
13.   // Use this for initialization
14.   voidStart()
15.   {
16.   rigid =GetComponent<Rigidbody2D>();
17.   Vector2 arah =newVector2(2,0).normalized;
18.   rigid.AddForce(arah * force);
19.   scoreP1 =0;
20.   scoreP2 =0;
21.   scoreUIP1 =GameObject.Find("Score1").GetComponent<Text>();
22.   scoreUIP2 =GameObject.Find("Score2").GetComponent<Text>();
23.   }
24.   // Update is called once per frame
25.   voidUpdate()
26.   {
27.   }
28.   privatevoidOnCollisionEnter2D(Collision2D coll)
29.   {
30.   if(coll.gameObject.name =="TepiKanan"){
31.   scoreP1 +=1;
32.   TampilkanScore();
33.   ResetBall();
34.   Vector2 arah =newVector2(2,0).normalized;
35.   rigid.AddForce(arah * force);
36.   }
37.   if(coll.gameObject.name =="TepiKiri"){
38.   scoreP2 +=1;
39.   TampilkanScore();
40.   ResetBall();
41.   Vector2 arah =newVector2(-2,0).normalized;
42.   rigid.AddForce(arah * force);
43.   }
44.   if(coll.gameObject.name =="Pemukul1"|| coll.gameObject.name
=="Pemukul2"){
45.   float sudut =(transform.position.y - coll.transform.position.y)*5f;
46.   Vector2 arah =newVector2(rigid.velocity.x, sudut).normalized;
47.   rigid.velocity =newVector2(0,0);
48.   rigid.AddForce(arah * force *2);
49.   }
50.   }
51.   voidResetBall()
52.   {
53.   transform.localPosition =newVector2(0,0);
54.   rigid.velocity =newVector2(0,0);
55.   }
56.   voidTampilkanScore()
57.   {
58.   Debug.Log("Score P1: "+ scoreP1 +" Score P2: "+ scoreP2);
59.   scoreUIP1.text = scoreP1 +"";
60.   scoreUIP2.text = scoreP2 +"";
61.   }
62. }

Pembahasan

using UnityEngine.UI;

Digunakan untuk mengakses komponen-komponen untuk UI

Text scoreUIP1;

Text scoreUIP2;

Digunakan untuk menyimpan gameobject text

scoreUIP1 = GameObject.Find("Score1").GetComponent<Text>();

scoreUIP2 = GameObject.Find("Score2").GetComponent<Text>();

Digunakan untuk mengakses GameObject yang memiliki Nama Score1


dan Score 2. Kemudian dari GameObject tersebut di cari komponen Text
yang ada didalamnya yang kemudian di simpan ke scoreUIP1 dan Score
UIP2.

void TampilkanScore() {

          Debug.Log("Score P1: " + scoreP1 + " Score P2: " +


scoreP2);

          scoreUIP1.text = scoreP1 + "";

          scoreUIP2.text = scoreP2 + "";


      }

Digunakan untuk mengimplementasikan penampilan score dengan


memanggil function TampilanScore().

Sehingga ketika dijalankan hasilnya sebagai berikut:

Selanjutnya menampilkan Halaman Selesai

Menampilkan Halaman Selesai


Sebuah game akan terasa kurang jika tidak adalah Halaman
Selesai/Halaman Gameover. Setiap game harus ada akhir yang harus
diselesaikan. Di Submodul ini kita akan membahas tentang menampilkan
Halaman selesai ketika salah satu dari player mencapai target skor. 

Praktik: Membuat UI GameOver

1. Tambahkan UI Panel pada Canvas dengan cara Klik Kanan pada Canvas
kemudian pilih UI > Panel. Ubah Nama
dari Panel menjadi PanelSelesai.

2. Atur warna pada PanelSelesai dengan warna yang lebih gelap.


Tujuannya, agar tekst yang diatasnya lebih dapat terbaca)
3. Tambahkan 2 Text di dalam Panel (Klik kanan pada PanelSelesai, Pilih
UI > Text)

Aturlah kedua Text sebagai berikut:


 Text 1
o Nama Object: Judul
o Text: Permainan Selesai
o Font: joystix monospace
o Font Size: 77
o Alignment: Center-Center
o Color: Putih
 Text 2
o Nama Object: Pemenang
o Text: Player Merah Pemenang!
o Font: joystix monospace
o Font Size: 47
o Alignment: Center-Center
o Color: Putih

Jangan lupa untuk mengatur posisi dan width dan height pada Rect
Transform

Sehingga nampak sebagai berikut:

4. Tambahkan 2 Button di dalam PanelSelesai (Klik kanan pada Panel


selesai > UI > Button)
Aturlah kedua Text sebagai berikut:

  Button 1
o Nama Object: BtnMenu
o Width: > 271
o Height: > 92
o Source Image: Persegi
o Normal Color: Putih
o Pressed Color: Oranye
 Text pada Botton 1
o Text: Kembali Ke Main Manu
o Font: joystix monospace
o Font Size: 26
o Alignment: Center-Center
o Color: Hitam
  Button 2
o Nama Object: BtnUlangi
o Width: > 271
o Height: > 92
o Source Image: Persegi
o Normal Color: Putih
o Pressed Color: Oranye
 Text pada Botton 2
o Text: Ulangi Permainan
o Font: joystix monospace
o Font Size: 26
o Alignment: Center-Center
o Color: Hitam

Jika dijalankan maka nampak sebagai berikut:

Praktik: Membuat Kondisi untuk Menampilkan Halaman


Selesai

Setelah halaman selesai selanjutnya membuat kondisi jika salah satu


player memiliki skor 5 maka dia menjadi pemenang. Sehingga memiliki
Alur sebagai berikut:

 Tampilan Score

 Cek Score apakah sudah memiliki 5 skor

 Jika memiliki 5 skor maka tampilkan halaman Selesai dan hentikan


permainan (Menghilangkan bola)

Sehingga langkah-langkah sebagai berikut

1. Buka Script BallController.cs, tambahkan kode sebagai berikut:

 Tambahkan variable di dalam class BallController

1. GameObject panelSelesai;
2.         Text txPemenang; 
 Tambahkan inisialisasi variable panelSelesai tersebut di function
Start()
1.  panelSelesai =GameObject.Find("PanelSelesai");
2.  panelSelesai.SetActive(false);
 Tambahkan kode ini setelah menampilkan skor saat bola
menyentuh tepi kanan

1.  if(scoreP1 ==5){
2.                 panelSelesai.SetActive(true);
3.                 txPemenang
=GameObject.Find("Pemenang").GetComponent<Text>();
4.                 txPemenang.text ="Player Biru Pemenang!";
5.                 Destroy(gameObject);
6.                 return;
7.             } 
 Tambahkan code ini setelah menampilkan score ketika bola
menyentuh tepi kiri

1. if(scoreP2 ==5){
2.                 panelSelesai.SetActive(true);
3.                 txPemenang
=GameObject.Find("Pemenang").GetComponent<Text>();
4.                 txPemenang.text ="Player Merah Pemenang!";
5.                 Destroy(gameObject);
6.                 return;
7.             } 
 Simpan dengan tekan Ctrl+S

Sehingga seluruh kode menjadi sebagai berikut:

1. usingSystem.Collections;
2. usingSystem.Collections.Generic;
3. usingUnityEngine;
4. usingUnityEngine.UI;
5.  
6.  
7. publicclassBallController:MonoBehaviour
8. {
9.  
10.  
11.     publicint force;
12.     Rigidbody2D rigid;
13.  
14.  
15.     int scoreP1;
16.     int scoreP2;
17.  
18.  
19.     Text scoreUIP1;
20.     Text scoreUIP2;
21.  
22.  
23.     GameObject panelSelesai;
24.     Text txPemenang;
25.  
26.  
27.     // Use this for initialization
28.     voidStart()
29.     {
30.         rigid =GetComponent<Rigidbody2D>();
31.         Vector2 arah =newVector2(2,0).normalized;
32.         rigid.AddForce(arah * force);
33.  
34.  
35.         scoreP1 =0;
36.         scoreP2 =0;
37.  
38.  
39.         scoreUIP1 =GameObject.Find("Score1").GetComponent<Text>();
40.         scoreUIP2 =GameObject.Find("Score2").GetComponent<Text>();
41.  
42.  
43.         panelSelesai =GameObject.Find("PanelSelesai");
44.         panelSelesai.SetActive(false);
45.     }
46.  
47.  
48.     // Update is called once per frame
49.     voidUpdate()
50.     {
51.  
52.  
53.     }
54.  
55.  
56.     privatevoidOnCollisionEnter2D(Collision2D coll)
57.     {
58.         if(coll.gameObject.name =="TepiKanan"){
59.             scoreP1 +=1;
60.             TampilkanScore();
61.             if(scoreP1 ==5){
62.                 panelSelesai.SetActive(true);
63.                 txPemenang
=GameObject.Find("Pemenang").GetComponent<Text>();
64.                 txPemenang.text ="Player Biru Pemenang!";
65.                 Destroy(gameObject);
66.                 return;
67.             }
68.             ResetBall();
69.             Vector2 arah =newVector2(2,0).normalized;
70.             rigid.AddForce(arah * force);
71.         }
72.  
73.  
74.         if(coll.gameObject.name =="TepiKiri"){
75.             scoreP2 +=1;
76.             TampilkanScore();
77.             if(scoreP2 ==5){
78.                 panelSelesai.SetActive(true);
79.                 txPemenang
=GameObject.Find("Pemenang").GetComponent<Text>();
80.                 txPemenang.text ="Player Merah Pemenang!";
81.                 Destroy(gameObject);
82.                 return;
83.             }
84.             ResetBall();
85.             Vector2 arah =newVector2(-2,0).normalized;
86.             rigid.AddForce(arah * force);
87.         }
88.  
89.  
90.         if(coll.gameObject.name =="Pemukul1"|| coll.gameObject.name
=="Pemukul2"){
91.             float sudut =(transform.position.y - coll.transform.position.y)*5f;
92.             Vector2 arah =newVector2(rigid.velocity.x, sudut).normalized;
93.             rigid.velocity =newVector2(0,0);
94.             rigid.AddForce(arah * force *2);
95.         }
96.  
97.  
98.     }
99.  
100.  
101.     voidResetBall()
102.     {
103.         transform.localPosition =newVector2(0,0);
104.         rigid.velocity =newVector2(0,0);
105.     }
106.  
107.  
108.     voidTampilkanScore()
109.     {
110.         Debug.Log("Score P1: "+ scoreP1 +" Score P2: "+ scoreP2);
111.         scoreUIP1.text = scoreP1 +"";
112.         scoreUIP2.text = scoreP2 +"";
113.     }
114. }

Pembahasan

1. GameObject panelSelesai;
2. Text txPemenang;

Digunakan untuk menghandle UI Selesai

1.  panelSelesai =GameObject.Find("PanelSelesai");
2.  panelSelesai.SetActive(false);

Memanggil GameObject PanelSelesai yang terdapat di Hierarchy

Kemudian memastikan dalam keadaaan non aktif.


1.  if(scoreP1 ==5)

 Jika score pemukul 1 lebih dari 5

1. panelSelesai.SetActive(true);

Maka halaman Selesai ditampilkan

1. txPemenang
=GameObject.Find("Pemenang").GetComponent<Text>();

Cari Komponen UI Text pada GameObject Pemenang

1. txPemenang.text ="Player Biru Pemenang!";

Tampilkan text Player Biru Pemenang

1. Destroy(gameObject);

Hilangkan Bola

1. Return;

Kode selesai dan tidak dilanjutkan untuk membaca kode


selanjutnya

  

Jika dijalankan sebagai berikut:


Selanjutnya Kita akan Membahas tentang Membuat dan
Mengelola Halaman

Membuat dan Mengelola Halaman

Sebuah game tidak lengkap jika tidak ada halaman utama/menu.

Biasanya di halaman utama/menu terdapat beberapa halaman navigasi


sebagai berikut:

 Tombol untuk masuk ke permainan


 Tombol untuk ke halaman kredit
 Tombol untuk keluar
 Tombol untuk tutorial

Di pembelajaran ini kita hanya menggunakan satu tombol untuk masuk ke


permainan. Selain membuat halaman utama juga mengatur perpindahan
halaman baik di halaman utama maupun di halaman selesai.

Praktik: Membuat Halaman Menu

Sebuah game memerlukan sebuah halaman menu/main menu

1. Tambahkan Scene baru dengan klik menu File > New Scene.


2. Ubah warna background pada Inspector Camera
3. Tambahkan UI Canvas (klik kanan pada scene (Untitled*)
pilih GameObject > UI > Canvas )

Pada Inspector Canvas, aturlah UI Scale Mode menjadi Scale With


Screen Size dan atur Reference Resolution X: 1280 dan Y: 720

4. Susunlah tampilan Home dengan tampilan sebagai berikut:


Tambahkan satu Text dan satu Button (Pastikan ditambah di dalam
Canvas)

Detailnya sebagai berikut:

 Text 1
o Nama Object: Judul
o Text: Pukul Bola
o Font: joystix monospace
o Font size: 96
o Alignment: Center - Center
o Color: Putih
 Button 1
o Nama Object: btnMulai
o Width: > 400
o Height: > 150
o Source Image: Persegi
o Normal Color: Putih
o Pressed Color: Oranye
 Text pada Botton 1
o Text: Mulai!
o Font: joystix monospace
o Font Size: 60
o Alignment: Center-Center
o Color: Hitam

5. Simpan Scene dengan klik Ctrl+S atau klik Menu File > Save


As... Simpan Di dalam folder Scenes dan beri nama Menu.

Praktik: Mengatur Perpindahan Halaman

1. Buka Folder Scripts, kemudian buat Script baru dengan


nama HalamanManager.cs.
2. Buka Script HalamanManager.cs dengan klik 2 kali. Lalu tambahkan
script berikut:

 Tambahkan library baru untuk mengelola Scene

1. usingUnityEngine.SceneManagement;
 Tambahkan variable di dalam class HalamanManager

1.  publicbool isEscapeToExit;
 Tambahkan 2 function kedalam class HalamanManager

1.   publicvoidMulaiPermainan()
2.   {
3.   SceneManager.LoadScene("Main");
4.   }
5.   publicvoidKembaliKeMenu()
6.   {
7.   SceneManager.LoadScene("Menu");
8.   }
 Tambahkan code ini di dalam function Update

1. if(Input.GetKeyUp(KeyCode.Escape)){
2.   if(isEscapeToExit){
3.   Application.Quit();
4.   }else{
5.   KembaliKeMenu();
6.   }
7.   }

Simpan perubahan dengan Ctrl+S, sehingga seluruh kode sebagai


berikut:

1. usingUnityEngine;
2. usingUnityEngine.SceneManagement;
3. publicclassHalamanManager:MonoBehaviour
4. {
5.   publicbool isEscapeToExit;
6.   // Use this for initialization
7.   voidStart()
8.   {
9.   }
10.   // Update is called once per frame
11.   voidUpdate()
12.   {
13.   if(Input.GetKeyUp(KeyCode.Escape)){
14.   if(isEscapeToExit){
15.   Application.Quit();
16.   }else{
17.   KembaliKeMenu();
18.   }
19.   }
20.   }
21.   publicvoidMulaiPermainan()
22.   {
23.   SceneManager.LoadScene("Main");
24.   }
25.   publicvoidKembaliKeMenu()
26.   {
27.   SceneManager.LoadScene("Menu");
28.   }
29. }

Pembahasan

1. usingUnityEngine.SceneManagement;

Digunakan untuk mengakses method-method mengelola Scene.

1. publicbool isEscapeToExit;

Digunakan untuk menentukan fungsi tombol Escape untuk kembali


ke Menu atau ke Main (Gameplay)

1.  publicvoidMulaiPermainan(){
2.           SceneManager.LoadScene("Main");
3.             }

Digunakan untuk berpindah ke halaman Main


1.             publicvoidKembaliKeMenu(){
2.           SceneManager.LoadScene("Menu");
3.             }

Digunakan untuk berpindah ke halaman Menu

1.  if(Input.GetKeyUp(KeyCode.Escape))
2.           {
3.       if(isEscapeToExit)
4.       {
5.               Application.Quit();
6.       }
7.       else
8.       {
9.               KembaliKeMenu();
10.       }
11.           }

Ketika menekan tombol Escape, jika nilai isEscapeToExit bernilai


benar maka akan keluar dari Game jika tidak maka akan kembali
ke Menu.

3. Masukkan script HalamanManager.cs ke GameObject Main Camera.


Setelah Anda memaskkan script ke gameobject. pada Inspector, centang
“Is Escape to Exit.” Sehingga ketika user menekan tombol escape maka
akan keluar dari aplikasi

Praktik: Daftarkan Semua Scene ke Scenes In Build

Scene yang telah dibuat, tidak dapat langsung diakses. Kita sudah
memiliki 2 Scene. Kedua scene tersebutt harus dimasukkan terlebih
dahulu ke Scenes In Build.

1. Buka Build Settings... (menu File > Build Settings...)

2. Tambahkan scene yang telah dibuka dengan klik Add Open Scenes.


Jika Anda memiliki lebih dari 1 scene, maka Anda harus buka scene
tersebut kemudian klik Add Open Scenes. Sehingga hasilnya seperti
berikut:

Sekarang Scene yang telah dibuat dapat dipanggil melalui script

Praktik: Memberi fungsi pada Button

Setelah script sudah dibuat dan scene sudah siap, selanjutnya hubungkan
script yang telah dibuat ke Button (btnMulai). Langkah-langkahnya antara
lain:
1. Klik btnMulai, kemudian pada komponen Button di panel Inspector.
Klik icon + pada On Click().

2. Kemudian masukkan gameObject Main Camera (yang terdapat script


HalamanManager.cs) ke list baru On Click () kemudian masukkan method
HalamanManager > MulaiPermainan().

3. Ketika dijalankan hasilnya sebagai berikut:

Ketika mejalankan dari scene menu, kemudian klik tombol mulai maka
akan membuka halaman permainan pada scene Main.
4. Terapkan juga function pada button di halaman selesai

Sekarang Game Anda sudah selesai dan dapat dimainkan dengan baik.

Selanjutnya kita akan belajar tentang Menambahkan Audio

Menambahkan Audio
 

Menuju bagian akhir dari modul ini, kali ini kita akan belajar
menambahkan audio agar game yang dibuat lebih hidup. Dalam tutorial
ini, audio akan digunakan sebagai:

 Background music
 Sound effect ketika bola terpantul

Salah satu tempat yang menyediakan audio gratis adalah Audio Library


– No Copyright
Music (https://www.youtube.com/channel/UCht8qITGkBvXKsR1Byln-wA).
Sebagai sampel, sound berikut ini yang akan kita gunakan.

 “Chiptune Shopping Adventures” untuk background


music (https://www.youtube.com/watch?v=CDEbHETrg9Q).
 “How Now Brown Cow?” untuk background
music (https://www.youtube.com/watch?v=_3No0WiZE0w).
 “Glass and Metal Collision” untuk sound
effect (https://www.youtube.com/watch?v=1yr897epApM).
 “Golf Ball Hit” untuk sound effect (https://www.youtube.com/watch?
v=kMr9BbC69PE).

Silakan gunakan audio lain yang Anda inginkan, tetapi perhatikan


lisensinya ya. Jika ingin konversi dari mp4 ke mp3, gunakan Online Video
Converter (https://www.onlinevideoconverter.com/mp3-converter).

Setelah mengunduh audio pilihan, buat folder Audios serta drag and drop


berkas audio tersebut ke folder tersebut.

Pada Unity, terdapat beberapa istilah yang berkaitan dengan Audio.


Beberapa istilah yang penting yaitu:

 Audio Listener

Audio Listener merupakan Component yang bertindak seperti


microphone. Component ini menerima semua input dari Audio Source
pada sebuah Scene dan memainkan music melalui speaker computer

 Audio Source

Audio Source merupakan Component yang memutar sebuah Audio


Clip pada Scene. Efek audio bisa ditambahkan pada Audio Source.

 Audio Clip

Audio Clip berisi data audio yang akan digunakan oleh Audio Source.
Format audio yang ada dalam Unity yaitu: .aif, .wav, .mp3, and .ogg.

Praktik: Menambahkan Background Music

Untuk menambahkan background music, lakukan tahapan berikut:


1. Buka Scene Main. lalu Klik Main Camera di Hierarchy, kemudian pada
Inspector tambahkan Audio
Source (Add Component > Audio > Audio Source)

2. Masukkan berkas “Bike_Rides.mp3” ke field Audio Clip. Jangan lupa


untuk centang Loop
Ketika dimainkan, musik langsung jalan, dan secara otomatis mengulang
ketika selesai. Anda juga dapat mengatur Volume untuk menyesuaikan
kenyamanan pada game yang Anda buat.

Praktik: Menambahkan Sound Effect

Penambahan sound effect akan dicontohkan dengan momen ketika Bola


menabrak benda lain. Langkah-langkah yang diperlukan cukup mirip
dengan penambahan background music, yaitu:

1. Klik GameObject Bola di Hierarchy, pada Inspector, Tambahkan Audio


Source. 
2.  Biarkan field Audio Clip tetap kosong. Lalu hilangkan centang
pada Play On Awake

3. Selanjutnya, agar sound effect dapat diputar pada waktu yang sesuai,
buka script BolaController.cs lalu tambahkan potongan kode berikut.

 Pada inisialisasi variabel, tambahkan:

1. AudioSource audio;
2. publicAudioClip hitSound;
 Pada prosedur Start(), tambahkan:
1.  audio =GetComponent<AudioSource>();

untuk “mengambil” komponen Audio Source

 Pada prosedur OnCollisionEnter2D, tambahkan:

1.  audio.PlayOneShot(hitSound);
 Simpan perubahan dengan tekan Ctrl+S

Sehingga seluruh code sebagi berikut:

1. usingUnityEngine;
2. usingUnityEngine.UI;
3. publicclassBallController:MonoBehaviour
4. {
5.   publicint force;
6.   Rigidbody2D rigid;
7.   int scoreP1;
8.   int scoreP2;
9.   Text scoreUIP1;
10.   Text scoreUIP2;
11.   GameObject panelSelesai;
12.   Text txPemenang;
13.   AudioSource audio;
14.   publicAudioClip hitSound;
15.   // Use this for initialization
16.   voidStart()
17.   {
18.   rigid =GetComponent<Rigidbody2D>();
19.   Vector2 arah =newVector2(2,0).normalized;
20.   rigid.AddForce(arah * force);
21.   scoreP1 =0;
22.   scoreP2 =0;
23.   scoreUIP1 =GameObject.Find("Score1").GetComponent<Text>();
24.   scoreUIP2 =GameObject.Find("Score2").GetComponent<Text>();
25.   panelSelesai =GameObject.Find("PanelSelesai");
26.   panelSelesai.SetActive(false);
27.   audio =GetComponent<AudioSource>();
28.   }
29.   // Update is called once per frame
30.   voidUpdate()
31.   {
32.   }
33.   privatevoidOnCollisionEnter2D(Collision2D coll)
34.   {
35.   audio.PlayOneShot(hitSound);
36.   if(coll.gameObject.name =="TepiKanan"){
37.   scoreP1 +=1;
38.   TampilkanScore();
39.   if(scoreP1 ==5){
40.   panelSelesai.SetActive(true);
41.   txPemenang =GameObject.Find("Pemenang").GetComponent<Text>();
42.   txPemenang.text ="Player Biru Pemenang!";
43.   Destroy(gameObject);
44.   return;
45.   }
46.   ResetBall();
47.   Vector2 arah =newVector2(2,0).normalized;
48.   rigid.AddForce(arah * force);
49.   }
50.   if(coll.gameObject.name =="TepiKiri"){
51.   scoreP2 +=1;
52.   TampilkanScore();
53.   if(scoreP2 ==5){
54.   panelSelesai.SetActive(true);
55.   txPemenang =GameObject.Find("Pemenang").GetComponent<Text>();
56.   txPemenang.text ="Player Merah Pemenang!";
57.   Destroy(gameObject);
58.   return;
59.   }
60.   ResetBall();
61.   Vector2 arah =newVector2(-2,0).normalized;
62.   rigid.AddForce(arah * force);
63.   }
64.   if(coll.gameObject.name =="Pemukul1"|| coll.gameObject.name
=="Pemukul2"){
65.   float sudut =(transform.position.y - coll.transform.position.y)*5f;
66.   Vector2 arah =newVector2(rigid.velocity.x, sudut).normalized;
67.   rigid.velocity =newVector2(0,0);
68.   rigid.AddForce(arah * force *2);
69.   }
70.   }
71.   voidResetBall()
72.   {
73.   transform.localPosition =newVector2(0,0);
74.   rigid.velocity =newVector2(0,0);
75.   }
76.   voidTampilkanScore()
77.   {
78.   Debug.Log("Score P1: "+ scoreP1 +" Score P2: "+ scoreP2);
79.   scoreUIP1.text = scoreP1 +"";
80.   scoreUIP2.text = scoreP2 +"";
81.   }
82. }

Pembahasan:

1. AudioSource audio;

Sebagai kontroller audio

1. publicAudioClip hitSound;

Menyimpan file Audio

1.  audio.PlayOneShot(hitSound);
Menjalankan sebuah audio

4. Terakhir, buka Inspector Bola. Lalu drag


berkas“Glass_and_Metal_Collision.mp3” ke field HitSound Ball
Controller (Script).

Jika dijalankan akan menjadi sebagai berikut:

Anda juga dapat mengatur Volume dan Pitch untuk menyesuaikan


gameplay yang Anda buat.

Selanjutnya adalah Tugas

Submission
Selamat, Anda telah menyelesaikan materi dalam kelas Belajar Membuat
Game Untuk Pemula. Untuk lulus dan mendapatkan sertifikat dari
Akademi ini, Anda harus mengumpulkan Tugas Akhir berupa game yang
Anda buat sendiri. 
Game tersebut dibuat dengan memanfaatkan materi pada modul yang
telah Anda pelajari sebelumnya. Atau, Anda juga dapat
mengembangkannya menjadi lebih menarik.

Syarat yang Harus Ada di Dalam Game

 Tema game tentang Game Pong 


 Game yang dikirimkan tidak boleh sama seperti di Academy (Perubahan
dapat disebutkan di kolom komentar saat mengirimkan tugas)
 Terdapat Audio
 Dapat dimainkan dengan baik

Resources Asset 2D

 http://www.gameart2d.com/freebies.html
 https://kenney.nl/assets

Restriction atau Ketentuan dari aplikasi yang di submit

 Project harus menggunakan Unity.


 Bahasa pemrograman yang digunakan adalah C#. Karena code dari
aplikasi akan review oleh tim penilai, dan C# digunakan sebagai
standarisasi penilaian.

Berkas Yang Harus Dikirimkan Meliputi :

 Kirimkan berkas project Anda  (Hanya folder Assets dan folder


ProjectSettings)
Semua berkas dalam bentuk  satu Zip.

Jika Anda gagal mengunggah tugas, Anda dapat mengunggahnya


menggunakan via Dropbox atau Google Drive.

Submission anda akan dinilai / direview secara manual oleh tim


penilai dalam maksimal 3 (tiga) hari kerja (tidak termasuk sabtu,
minggu, dan hari libur nasional).

Kirim Aplikasi untuk menyelesaikan Tutorial ini


 KIRIM APLIKASI

Anda mungkin juga menyukai