JOB SHEET 3
PEMROGRAMAN GAME
PEMBUATAN GAME PEMUKUL BOLA
DISUSUN OLEH
1. Muhammad Yaskhar Khafid ([Link].16)
2. Siti Nurhaliza ([Link].22)
3. Tasya Zahwa Azzahra ([Link].24)
4. Wahyu Adhi Prabowo ([Link].26)
PROGRAM STUDI D3 TEKNIK INFORMATIKA
JURUSAN TEKNIK ELEKTRO
POLITEKNIK NEGERI SEMARANG
TAHUN 2022/2023
a. Tujuan Instruksional Khusus
Setelah melekukan praktikum ini Mahasiswa mampu :
1. Memahami dan menerapkan konsep dasar pemrograman game.
2. Memasukkan aset pada proyek akan dibuat.
3. Membuat scene masuk dan keluar game.
4. Menggerakkan aset atau karakter dalam game.
b. Dasar Teori
Untuk memahami elemen dasar untuk membuat game, kali ini kita akan
mempelajari aspek-aspek minimal pembuatan game dalam Unity, seperti Sprite,
Input, Scene dan Audio.
A. Sprite
Sprite adalah obyek grafis 2D yang digunakan untuk game 2D. Jika Anda
terbiasa bekerja dalam 3D, sprite pada dasarnya hanya menggunakan tekstur standar.
Namun, demi efisiensi dan kenyamanan selama pengembangan, terdapat teknik
khusus untuk menggabungkan dan mengelola tekstur sprite tersebut.
Banyak file type yang mendukung sprite seperti PSD, TIFF, JPG, TGA, PNG,
GIF, BMP, IFF, dan PICT. Untuk meng-import gambar dengan multi-layer maka
baiknya Anda gunakan PSD atau TIFF. Untuk memasukkan gambar tidak transparan
gunakan JPEG, Tetapi, kalau gambarnya transparan lebih baik gunakan PNG.
Untuk ukuran asset Sprite -misalnya dengan resolusi 1280x720- dianjurkan untuk
mendesain asset menggunakan resolusi tersebut. Dengan contoh gambar background
1280x720, maka kita gunakan ukuran obyek yang lebih kecil, misalnya 512x512.
Dengan menyesuaikan ukuran , diharapkan asset yang tampil tidak pecah karena
diperbesar atau diperkecil. Lebih lanjut, dengan ukuran asset yang tepat dan tidak
terlalu besar, ukuran berkas jadi lebih optimal.
Tools yang digunakan untuk mengolah gambar antara lain : Adobe Photoshop
(berbayar), [Link] (gratis), Gimp (gratis).
Dengan tools tersebut Anda dapat mengedit gambar sesuai kebutuhan, seperti
membuat, memotong, mengatur resolusi, mengatur warna gambar, dan banyak lagi.
Sementara untuk mencari gambar, Anda dapat menggunakan bantuan Google Images.
Tapi ingat, perhatikanlah lisensi dari masing-masing gambar yang digunakan.
Beberapa situs yang menyediakan asset game secara gratis antara lain:
[Link]
[Link]
[Link]
[Link]
B. Scene
Scene merupakan wadah yang menampung Game Object atau semua hal yang
kita butuhkan. Satu Scene dapat dipandang sebagai satu level atau satu
screen/tampilan dari sebuah object. Scene menyimpan semua GameObject yang
terdapat di Hierarchy. Berikut adalah contoh alur scene :
C. Audio
Game akan terasa hambar jika tidak ada audio, elemen krusial dalam sebuah
game. Audio sangat membantu memberi suasana tertentu atau memperjelas material
sebuah benda. Dari audio kita mengenal tentang musik dan sound. Musik merupakan
dari sebuah sound, namun sebuah sound belum tentu sebuah musik. Beberapa jenis
audio yang di-support Unity antara lain:
a) AIFF
b) WAV
c) MP3
d) Ogg
D. Input
Input adalah data yang diterima dan akan diproses oleh suatu sistem. Anda dapat
memperoleh data input dari Keyboard, Mouse, Joystick, Touch, Gyro, Compass,
Accelerometer, dan lain lain. Sedangkan untuk memperoleh nilai dari input peranti
tersebut, Anda dapat menggunakan Input Manager. Dalam game, input sangat
dibutuhkan. Apalagi, input merupakan perintah yang kita maksudkan pada sebuah
game yang tentunya sangat kita inginkan untuk dapat dilakukan oleh sebuah game.
Tidak seru bukan apabila kita memerintah game untuk memulai aksinya namun
ternyata game memproses perintah keluar game? Pasti kita akan menyebutnya error.
c. Alat dan Bahan
1. PC / Laptop .
2. Aplikasi Unity.
3. Aset untuk karakter game
d. Langkah Kerja
1.1. Menambahkan Asset pada Project
Langkah 1 :
Membuat folder dengan nama “Pingpong” di dalam folder Asset
Caranya dengan buka panel Project, kemudian klik kanan pilih Create > Folder.
Beri nama Pingpong.
Langkah 2:
Ekstrak file asset yang telah di unduh dan simpan didalam folder Pingpong yang
telah dibuat
1.2. Membuat Background
Langkah 1 : Menentukan resolusi yang digunakan
Sebelum menyusun sebuah tampilan, baiknya tentukan terlebih dahulu resolusi yang
digunakan. Karena target platform adalah Android, maka kita gunakan resolusi 16:9.
Buka panel Game kemudian pilih resolusi 16:[Link] juga dapat menambahkan
resolusi tertentu dengan menekan tombol plus (+).
Langkah 2 : Mengganti warna background
Untuk mengubah warnanya, klik dua kali pada Background di komponen Camera.
Kemudian akan terbuka color picker untuk memilih warna background yang
diinginkan.
1.3. Membuat Area Game
Langkah 1 : Membuat garis tepi dan garis pembatas tengah
a. Drag gambar Persegi yang ada di Asset dan letakkan di Panel Scene
b. Ubahlah nama Persegi menjadi Tepi atas dengan klik kanan pada GameObject
Persegi dan pilih Rename.
c. 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
d. Sehingga terlihat sebagai berikut:
e. Kemudian buatlah hal yang sama seperti TepiAtas untuk Tepi Bawah, Tepi-
Kanan , Tepi Kiri dan BatasTengah. Detailnya sebagai berikut:
o TepiBawah
Posisi X:0, Y:-4.5 dan Z:0
Skala X:26.8, Y:0.3 dan Z:1
o TepiKanan
Posisi X:8.5, Y:0 dan Z:0
Skala X:0.3, Y:14.37 dan Z:1
o TepiKiri
Posisi X:-8.5, Y:0 dan Z:0
Skala X:0.3, Y:14.37 dan Z:1
o BatasTengah
Posisi X:0, Y:0 dan Z:0
Skala X:0.1, Y:14.37 dan Z:1
Langkah 2 : Menambahkan Collision pada Tepi
Setelah selesai membuat tampilan Area Game, Anda akan menambahkan Collider
sebagai pembatas area agar bola tidak dapat menembus keluar area. Berikut ini
caranya:
a. Klik GameObject TepiAtas yang terdapat di Hierarchy.
b. Pada Panel Inspector, Tambahkan Komponen Collision dengan klik Add
Component > Physics 2D > Box Collider 2D.
c. Lalukan hal yang sama tepi bawah, tepi kanan, dan tepi kiri
4.4 Membuat Paddle (Pemukul)
Langkah 1 : Membuat gameobject paddle
a. Masukkan Persegi ke Scene kemudian ubah
Nama Persegi menjadi Pemukul1.
b. Kemudian Atur posisi dan Skala seperti ini:
Position: X: -7.5, Y:0 dan Z:0
Scale : X: 0.5, Y:5 dan Z:1
c. Sehingga hasilnya sebagai berikut :
d. Ubah warna sesuai keinginan
e. 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.
Langkah 2 : Membuat Pemukul Bergerak
a. Buka InputManager (Klik Edit > Project Settings > Input). Karena kita
akan menambahkan varian input baru, edit
field Size pada Axes dari 18 menjadi 32.
b. Untuk dua varian input terbawah, ikuti setting pada screenshot berikut
Vertical1 :
Vertical2 :
Langkah 3 : Membuat Script dan Variable
a. Di dalam folder Pingpong, tambahkan script baru dengan
nama [Link]. (Klik kanan > Create > C# Scripts).
b. Pada script [Link], Klik dua kali pada file
“ [Link]” untuk mulai menambahkan script. Lalu masukkan
script seperti dibawah ini:
c. Masukkan script [Link] yang telah dibuat ke dalam
GameObject Pemukul1. Anda bisa melakukannya dengan cara drag dan drop.
d. Buka Inspector pada Pemukul1 kemudian pada field Kecepatan diisi
nilai 7 dan pada Axis diisi “vertical1.
Langkah 4 : Memberikan Batasan atas dan bawah
a. Buka script [Link] dengan klik 2 kali kemudian ubah kode
seperti dibawah ini :
b. Untuk mengetahui batas atas dan batas bawah, Anda dapat menggeser paddle
ke posisi paling atas. Anda dapat melihat nilai Y pada komponen Transform.
c. Kemudian isikan kedua nilai tersebut pada field Batas Atas dan Batas Bawah.
d. Kemudian buatlah paddle lawan. Caranya, duplikasi
GameObject Pemukul1 diHierarchy dengan nama Pemukul2. Lalu atur posisi
x menjadi 7.5. Ubahlah jadi warna yang berbeda. Atur juga nilai Axis
menjadi Vertical2
e. sehingga tampil seperti ini:
4.5 Membuat Bola
Langkah 1 : 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.
Langkah 2 : Menambahkan Physics 2D pada Bola
a. Buka Inspector pada Bola, Lalu tambahkan komponen RigidBody 2D (Add
Component > Physics 2D > Rigidbody 2D).
b. Kemudian atur nilai Linear Drag, Angular Drag, Gravity Scale menjadi 0.
Jangan lupa untuk centang Freeze Rotation Z
c. Tambahkan komponen Circle Collider 2D (Add Component > Physics
2D > Circle Collider 2D).
d. 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.
e. Klik PhysicsBola pada panel Project. Kemudian pada Inspector atur nilai
sebagai berikut. Friction menjadi 0 dan Bounciness menjadi 1
f. Terakhir, drag PhysicsBola dan drop ke field Material di Inspector Bola.
Langkah 3 : Menambahkan Code
a. Buat Script C# baru di dalam folder Scripts dengan nama [Link]
kemudian tambahkan kode di bawah ini.
b. Masukkan Script [Link] ke GameObject Bola yang terdapat di
Hierarchy.
c. Kemudian Atur nilai Force menjadi 200.
Langkah 4 : Menambahkan Reset Bola
a. Buka Script [Link] dengan klik 2 kali. Lalu tambahkan kode
sebagai berikut:
Langkah 5 : Mengatur pantulan bola pada piddle
a. Buka Script [Link] dengan klik 2 kali kmudian tambahkan kode sebagai
berikut:
b. Tambahkan kode ini di dalam function OnCollisionEnter2D(Collision2D coll).
4.6 Membuat Skor
Langkah 1 : Menambahkan Font
a. Download font pada link berikut : [Link]
[Link]
b. Setelah Anda memiliki sebuah font buatlah folder baru dengan nama Fonts.
c. Tambahkan berkas font “joystix [Link]” ke dalam folder Fonts. (Klik
kanan > Import New Asset ).
Sekarang Anda sudah memiliki font yang siap digunakan untuk UI Text.
Langkah 2 : Membuat UI skor
a. Tambahkan Teks baru dengan klik kanan pada Scene Main kemudian pilih
GameObject > UI > legacy >Text
b. 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.
c. Atur nilai posisi Rect Transform menjadi Top-Center.
d. Atur juga nilai Pos X: -115, Pos Y: -92, Width: 230 dan Height: 131
e. Pada komponen text, aturlah dengan nilai sebagai berikut:
Text: 0
Font: joystix monospace
Font size: 86
Alignment: Center – Center
Color: Putih
f. Sehingga tampilan pada panel Game menjadi seperti ini:
4.7 MEMBUAT UI GAMEOVER
a. Tambahkan UI Panel pada Canvas dengan cara klik kanan pada Canvas
kemudian pilih UI > Panel. Ubah Nama dari Panel menjadi PanelSelesai.
b. Atur warna panel menjadi gelap
c. Tambahkan 2 Text di dalam Panel (Klik kanan pada PanelSelesai, Pilih UI >
Text).
d. Berikut tampilan dari objek text Judul dan Pemenang
e. Tambahkan 2 Button di dalam PanelSelesai (Klik kanan pada Panel selesai >
UI > Button) dan aturlah sehingga seperti gambar di bawah ini
f. Buat halaman Homescreen dan aturlah sehingga tampil seperti dibawah ini:
-
g. Tambahkan script HalamanManager untuk mengatur perpindahan halaman
dan masukan script ke Main Camera
h. Daftarkan semua scene ke Build
i. Pada komponen Button di panel Inspector. Klik icon + pada On Click() untuk
memasukan function MulaiPermainan() yang berguna untuk masuk ke
halaman gameplay serta pada tampilan gameplay atur juga button KE MAIN
MENU DAN ULANGI PERMAINAN dan sesuaikan dengan function yang
telah di buat
j. Download mp3 yang akan digunakan sebagai assets dan buat masukan ke
folder Audios
k. Tambahkan background musik supaya game tidak membosankan dengan cara
tambahkan Audio Source (Add Component > Audio > Audio Source).
l. Tambahkan effect ketika bola berhasil di pukul supaya game tidak
membosankan dengan cara tambahkan Audio Source (Add Component >
Audio > Audio Source) dan kosongkan audio clip karena kita akan
mengaturnya melalui script
Script [Link]
using [Link];
using [Link];
using UnityEngine;
using [Link];
public class BallController : MonoBehaviour
{
// Start is called before the first frame update
public int force;
Rigidbody2D rigid;
int scoreP1;
int scoreP2;
Text scoreUIP1;
Text scoreUIP2;
GameObject panelSelesai;
Text txPemenang;
AudioSource audio;
public AudioClip hitSound;
void Start()
{
rigid = GetComponent<Rigidbody2D>();
Vector2 arah = new Vector2(2, 0).normalized;
[Link](arah * force);
scoreP1 = 0;
scoreP2 = 0;
scoreUIP1 = [Link]("Score1").GetComponent<Text>();
scoreUIP2 = [Link]("Score2").GetComponent<Text>();
panelSelesai = [Link] ("PanelSelesai");
[Link] (false);
audio = GetComponent<AudioSource>();
}
private void OnCollisionEnter2D(Collision2D coll)
{
[Link](hitSound);
if ([Link] == "TepiKanan")
{
scoreP1 += 1;
TampilkanScore();
if (scoreP1 == 5) {
[Link] (true);
txPemenang = [Link] ("Pemenang").GetComponent<Text> ();
[Link] = "Player Kuning Pemenang!";
Destroy (gameObject);
return;
}
ResetBall();
Vector2 arah = new Vector2(2, 0).normalized;
[Link](arah * force);
}
if ([Link] == "TepiKiri")
{
scoreP2 += 1;
TampilkanScore();
if (scoreP2 == 5) {
[Link] (true);
txPemenang = [Link] ("Pemenang").GetComponent<Text> ();
[Link] = "Player Orange Pemenang!";
Destroy (gameObject);
return;
}
ResetBall ();
Vector2 arah = new Vector2(-2, 0).normalized;
[Link](arah * force);
}
if ([Link] == "Pemukul1" || [Link] == "Pemukul2")
{
float sudut = ([Link].y - [Link].y) * 5f;
Vector2 arah = new Vector2([Link].x, sudut).normalized;
[Link] = new Vector2(0, 0);
[Link](arah * force * 2);
}
}
// Update is called once per frame
void Update()
{
}
void ResetBall()
{
[Link] = new Vector2(0, 0);
[Link] = new Vector2(0, 0);
}
void TampilkanScore()
{
[Link]("Score P1: " + scoreP1 + " Score P2: " + scoreP2);
[Link] = scoreP1 + "";
[Link] = scoreP2 + "";
}
Script [Link]
using [Link];
using [Link];
using UnityEngine;
using [Link];
public class HalamanManager : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
// Update is called once per frame
void Update()
{
iif ([Link]([Link]))
{
if (isEscapeToExit)
{
[Link]();
}
else
{
KembaliKeMenu();
}
}
}
public void MulaiPermainan()
{
[Link]("Main");
}
public void KembaliKeMenu()
{
[Link]("Menu");
}
V. Lembar Kerja
Lakukan arahan yang ditunjukkan pada bagian Langkah kerja!
Screenshoot hasil kerja yang kalian lakukan!
VI. Kesimpulan