Oleh
Bagus Slamet Oetomo (3.34.17.1.07)
Kelas IK-3B
Secara default, pada script yang baru ini akan tampil 2 buah prosedur, yaitu:
Start()
Prosedur ini akan dipanggil satu kali di awal, pada saat script pertama kali
di-enable. Prosedur ini sesuai untuk inisialisasi.
Update()
Prosedur ini dipanggil pada setiap frame, apabila script di-enable. Prosedur
ini sesuai untuk bagian script yang dieksekusi berulang-ulang.
Untuk daftar prosedur dan fungsi lengkap yang ada pada kelas
MonoBehaviour, silakan merujuk ke tautan ini: https://docs.unity3d.com/
ScriptReference/MonoBehaviour.html.
3. Setelah Anda klik info tersebut, akan muncul di jendela Console seperti
berikut:
Jika Anda klik salah satu list yang terdapat di console, akan muncul info
detail dari informasi nama berkas (file) script sampai baris kode tersebut. Anda
dapat menghilangkan info tersebut dengan klik tombol Clear.
5. Anda dapat menyimpannya dengan klik menu File > Save atau tekan
Ctrl+S. Kemudian beri nama Main.
B. MonoBehaviour
MonoBehaviour adalah class dasar dari setiap script Unity yang dibuat.
Ketika Anda menggunakan C#, MonoBehaviour secara otomatis (default) akan
tercipta.
. Debug.Log("Awake Dipanggil");
. }
. }
Pembahasan kode:
. using System.Collections;
. using System.Collections.Generic;
. using UnityEngine;
3 baris kode di atas adalah Library bawaan saat script dibuat. Kita dapat
memberi Library tambahan seperti scene, UI dan lainnya.
Nama kelas dari script. Nama kelas harus sama dengan berkas (file) script yang
dibuat.
. void Awake()
. Debug.Log("Awake Dipanggil");
Start
. using System.Collections;
. using System.Collections.Generic;
. using UnityEngine;
.
. public class LatihanStart : MonoBehaviour {
. void Start() {
. Debug.Log("Start Dipanggil");
. }
. }
Pembahasan kode:
. using System.Collections;
. using System.Collections.Generic;
. using UnityEngine;
3 baris kode di atas adalah Library bawaan saat script dibuat. Kita dapat
memberi Library tambahan seperti scene, UI dan lainnya.
Nama kelas dari script. Nama kelas harus sama dengan berkas script yang dibuat.
. void Start()
. Debug.Log("Start Dipanggil");
Update
. using System.Collections;
. using System.Collections.Generic;
. using UnityEngine;
.
. public class LatihanUpdate : MonoBehaviour {
. void Update() {
. Debug.Log("Waktu untuk Update :" + Time.deltaTime);
. }
. }
Pembahasan kode:
. using System.Collections;
. using System.Collections.Generic;
. using UnityEngine;
3 baris kode di atas adalah Library bawaan saat script dibuat. Kita dapat
memberi Library tambahan seperti scene, UI dan lainnya.
Nama kelas dari script. Nama kelas harus sama dengan berkas script yang dibuat.
. void Update()
Fungsi ini akan dipanggil saat script diaktifkan dan dijalankan setelah Start().
Dijalankan saat fungsi Update() dijalankan dan akan menampilkan waktu yang
sama.
FixedUpdate
Pembahasan kode:
. using System.Collections;
. using System.Collections.Generic;
. using UnityEngine;
3 baris kode di atas adalah Library bawaan saat script dibuat. Kita dapat
memberi Library tambahan seperti scene, UI dan lainnya.
Nama kelas dari script. Nama kelas harus sama dengan berkas script yang dibuat.
. void FixedUpdate()
Fungsi ini akan dipanggil saat script diaktifkan dan dijalankan setelah Update().
LateUpdate
. using System.Collections;
. using System.Collections.Generic;
. using UnityEngine;
.
. public class LatihanLateUpdate : MonoBehaviour {
. void LateUpdate() {
. Debug.Log("Waktu untuk LateUpdate :" + Time.deltaTime);
. }
. }
Pembahasan kode:
. using System.Collections;
. using System.Collections.Generic;
. using UnityEngine;
3 baris kode di atas adalah Library bawaan saat script dibuat. Kita dapat
memberi Library tambahan seperti scene, UI dan lainnya.
Nama kelas dari script. Nama kelas harus sama dengan berkas script yang
dibuat.
. void LateUpdate()
Fungsi ini akan dipanggil saat script diaktifkan dan dijalankan setelah Update()
dan FixedUpdate().
3. Notepad++
D. Variable
Sebuah variable (variabel) dapat menyimpan satu dari 2 tipe nilai, yaitu
value type dan reference type.
Values Type adalah dasar dari tipe data primitif seperti char, int, dan float,
serta tipe user-defined yang dideklarasikan dengan struct.
Reference Type adalah kumpulan class atau data kompleks yang dibangun
dari tipe data primitif.
Macam-macam variabel yang terdapat di Unity:
Modifier Access
Modifier Access merupakan hak akses user untuk memanggil sebuah variabel
dari sebuah kelas.
Public
Variabel yang dapat dipanggil/diakses dari kelas lain, misalnya:
Protected
Variabel yang dapat dipanggil/diakses hanya dari kelas turunan, misalnya:
Default
Variabel yang memiliki hak akses sama seperti Private, misalnya:
Cara deklarasi variabel yang sering digunakan dalam membuat game dapat
dikelompokkan sebagai berikut:
Global Variable
Variabel yang dapat digunakan atau dipanggil oleh semua fungsi atau method,
misalnya:
Constant Variable
Variabel yang memiliki nilai tetap dan tidak dapat diubah, misalnya:
Static Variable
Variabel yang dapat langsung dipanggil oleh kelas lain tanpa harus membuat
objek dari kelas itu sendiri, misalnya:
Tetapi hal di atas tidak berlaku pada variabel Konstanta yang memiliki
aturan sebagai berikut:
Semua huruf pada kata terdiri dari huruf besar, misalnya TOKEN.
Jika lebih dari 2 kata, maka dipisahkan dengan garis bawah (underscore),
misalnya TOKEN_ADS.
E. Function
. Tambahkan();
Jika nama fungsi lebih dari 2 kata, maka kata kedua menggunakan huruf
besar, misalnya:
. SamaDengan();
F. Classes dan Object
Class adalah sebuah bangunan dasar dari bahasa berorientasi object. Ia berisi
metode dan variabel yang berfungsi untuk menciptakan
suatu instance dari object. Sedangkan, object itu sendiri adalah perumpamaan
dari class yang merepresentasikan sebuah object. Anda dapat melihat bagan di
bawah ini.
Berikutnya adalah contoh penerapan Class dan Object pada game, tepatnya
pada class Karakter yang nantinya akan digunakan sebagai object di Player.
Perhatikan bagan di bawah ini:
Sebuah class Karakter memiliki property seperti Name, Health, dan
Damage. Class tersebut juga memiliki method seperti MoveLeft(), MoveRight(),
Jump() dan Attack(). Pada object Player yang merupakan representasi
dari class Karakter, Anda dapat menggunakan dan mengubah nilai yang terdapat
di properties dan dapat juga memanggil methods yang terdapat di Karakter.
G. Inheritance
Ketika membuat kelas baru di Unity, maka secara otomatis kelas tersebut
merupakan turunan dari MonoBehaviour sebagai default-nya. Di dalam kelas
turunan ini kita bisa mengakses banyak fungsi seperti Update(), Start(), dan
fungsi lain yang dimiliki oleh class Monobehaviour.
. using System.Collections;
. using System.Collections.Generic;
. using UnityEngine;
.
. public class Kosongan : MonoBehaviour {
.
. // Use this for initialization
. void Start() {
.
. }
.
. // Update is called once per frame
. void Update() {
.
. }
. }
Kemudian, terdapat 3 base modifier untuk menentukan apa saja function yang
dapat diturunkan atau tidak, yakni sebagai berikut:
1. Public, merupakan feature pada method, property atau variable yang dapat
diturunkan kepada kelas yang diwariskan dan dapat diakses juga oleh kelas yang
bukan turunannya.
2. Protected, murupakan feature pada method, property atau variable yang dapat
diturunkan kepada kelas yang diwariskan tetapi tidak dapat diakses oleh kelas
yang bukan turunannya.
3. Private, murupakan fitur pada method, property atau variable yang tidak
dapat diturunkan kepada kelas yang diwariskan serta tidak dapat diakses oleh
kelas yang bukan turunannya.
H. Array
Jika Anda terbiasa menggunakan bahasa Java, mungkin akan sedikit bingung
dengan penulisan Array di C#. Jangan khawatir, Anda dapat mempelajari
perbedaannya di pembahasan ini. Array digunakan untuk menyimpan tipe data
sejenis yang dikelompokkan sebagai satu kesatuan, seperti contoh di bawah ini.
Kita menyimpan tipe data integer dengan 5 data yaitu 50, 20, 30, 10, dan 40.
Data tersebut dapat diakses oleh nomor indeks. Misalnya, untuk mendapatkan
nilai data 10 pada indeks 3, kita dapat menulis myArray[3]. Berikut ini beberapa
latihan tentang array:
2.
3. void Start () {
5.
6. intArray[0] = 10; //Memasukkan nilai ke Array
7. intArray[1] = 20;
8. intArray[2] = 30;
9. intArray[3] = 40;
10. }
Multi-Dimensional Arrays
Berikut ini adalah contoh array 2 dimensi di mana untuk mendapatkan sebuah
nilainya, kita perlu 2 buah nilai, misalnya baris ke 1 dan kolom ke 0 dengan nilai
30.
2.
3. void Start () {
5.
6. intArray2[0,0] = 10; //Memasukkan nilai ke Array
7. intArray2[0,1] = 20;
8. intArray2[1,0] = 30;
9. intArray2[1,1] = 40;
10. }
Jagged Arrays
2.
3. void Start () {
5.
6. intArray3[0] = new int[2]; //Inisialisasi Array
7. intArray3[1] = new int[3];
9. intArray3[0][1] = 20;
13. }
5. Pada field Location pilih tempat di mana proyek tersebut akan disimpan.
6. Untuk tutorial ini pilih OFF di sebelah tulisan “Enable Unity Analytics.”
1. Pertama tama adalah penyusunan folder asset. Tujuan dari penyusunan folder asset
agar tidak merepotkan user saat pembuatan game. Berikut adalah contohnya
Keterangan:
Audios, untuk menyimpan berkas sound dan musik
2. Import gambar yang akan digunakan dalam pembuatan game ini dengan cara klik
kanan-> import project atau dengan drag and drop gambar yang ingin diimport ke
dalam folder image.
3. Pada panel Inspector dari Asset yang sudah dimasukkan kedalam folder images
tadi , pastikan format semua asset gambar adalah Sprite (2D and UI). Seperti gambar
di bawah ini:
Keterangan :
Type Sprite adalah tipe gambar yang digunakan untuk object 2D dan juga object UI.
Sedangkan untuk object 3D menggunakan Type Texture.
1. Pada Panel Game klik Resolusi (Free Aspect) > klik icon tambah “+” > atur
nama Label “HD” > Width & Height 1280 x 720 > Klik OK untuk menyimpan
pengaturan resolusi baru yang sudah dibuat.
2. Drag gambar Background yang terdapat pada folder Images menuju
panel Hierarchy atau Scene.
3. Atur nilai konfigurasi dari Background dengan nilai Order in Layer menjadi -1
pada panel Inspector seperti gambar di bawah ini
Order in Layer berfungsi untuk melihat posisi yang mana terlebih dahulu ditampilkan.
Jika nilai semakin besar maka gambar tersebut semakin terlihat di depan objek
lainnya. Selain itu juga, Anda dapat mengatur posisi sumbu Z untuk menentukan
object mana yang berada di depan objek lain.
4. Selanjutnya ubah pengaturan dari Main Camera dengan cara klik Main
Camera pada panel Hierarchy. Kemudian pada Panel Inspector ubah Clear
Flags menjadi Depth only dan Size menjadi 3.6
Depth only adalah kondisi di mana secara default kamera tidak memberi background
apapun karena menggunakan background sendiri.
Praktik: Menyusun Game Object
1. Susun Objek pengelompok yaitu logo video dan photo, dengan import dengan cara
drag and drop logo grafis.png dan video.png ke dalam hierarchy. Susunlah seperti
berikut:
2. Selanjutnya masukkan salah satu object photo dan salah satu object Video ke
dalam panel Scene
3. Ubah nama Object nama objek pada Panel Inspector menjadi nama
object_photo dan nama object_video agar mempermudah proses editing dan ubah
nilai Order in Layer menjadi 1.
Praktik: Membuat Text Score dan Menyimpan Project
3. Ubah nama Object Text di dalam Canvas menjadi Score dan sesuaikan
pengaturannya sebagai berikut:
Mengatur custom Rect Transform: Top-Center (sebagai acuan posisi text)
Set Text: 0
Font Size : 72
Aligment : Center
4. Simpan Scene yang telah Anda buat ke dalam folder Scenes dengan
nama Gameplay. Caranya, klik Menu File > Pilih Save Scenes As atau tekan Ctrl +
Shift + S.
Menambahkan Component dan Tag pada Game Object
Praktik: Menambahkan komponen pada app editing photo dan app editing
video
Kali ini kita akan membuat app Editing photo dan Editing Video yang posisinya tidak
mempengaruhi perubahan yang disebabkan object lain dan dari gravitasi. Maka dari
itu kita perlu menambahkan Rigidbody Kinematic. Kemudian pada object sampah
satu dengan lainnya bisa bertumpukkan. Maka atur collider pada objek tersebut
menjadi Trigger. Langkah-langkahnya sebagai berikut:
Tag digunakan untuk menandai sebuah atau beberapa GameObject dan juga
mempermudahkan pemanggilan GameObject tersebut di dalam script.
1.Pada GameObject _photo tambahkan tag Photo. Klik Tag > Kemudian pilih Add
Tag… Kemudian klik icon tambah “+” kemudian inputkan tag photo setelah itu
Klik Save/tekan Enter untuk simpan tag baru.
2. Tambahan tag Video pada GameObject _video dengan cara yang sama seperti
pada _photo sebelumnya.
Praktik: Menambahkan Component pada Box Photo dan Box Video
Kita perlu menambahkan collider pada Photo dan Video untuk mendeteksi object lain
yang memiliki komponen RigidBody 2D dan bisa collision dengan objek tersebut.
Langkah-langkahnya sebagai berikut:
1. Tambahkan Box Collider 2D pada BoxNonOrganik (klik
GameObject BoxNonOrganik > buka Inspector > Klik tombol Add Component >
Pilih Physics 2D > Pilih Box Collider 2D kemudian beri nilai Size nya.
Collider adalah area deteksi object. Area collider tersebut dikecilkan karena ketika
menarik object, sampah harus diarahkan ke tengah logo video atau photo agar logo
app photo atau video dapat menghilang
Pratktik: Membuat Tampilan Acak pada app photo dan app video
. using System.Collections.Generic;
. using UnityEngine;
.
. public class GerakPindah : MonoBehaviour {
. void Start () {
. gameObject.GetComponent<SpriteRenderer>().sprite = sprites[index];
. }
.
. // Update is called once per frame
. void Update () {
.
. }
. }
Simpan script
Pembahasan Kode:
float speed = 3f;
Memberi nilai Acak dengan batasan maksimal sejumlah array Sprite yang
dimasukkan.
gameObject.GetComponent<SpriteRenderer>().sprite = sprites[index];
1. Supaya GameObject photo dan video dapat digerakkan dengan Mouse/Touch, buka
kembali script GerakPindah.cs dengan klik 2x di panel Project. Tambahkan kode di
bawah ini di dalam class GerakPindah atau di bawah function Update().
. private Vector3 screenPoint;
. void OnMouseDown()
. {
. firstY = transform.position.y;
. screenPoint = Camera.main.WorldToScreenPoint(gameObject.transform.position);
. }
. void OnMouseDrag()
. {
. transform.position = curPosition;
. }
. {
. }
Variabel ini digunakan untuk menyimpan selisih posisi object dengan posisi
mouse
private float firstY;
Variabel ini digunakan untuk menyimpan posisi vertikal awal yang nantinya
digunakan untuk mengembalikan ke posisi semula
void OnMouseDown()
{
firstY = transform.position.y;
screenPoint = Camera.main.WorldToScreenPoint(gameObject.transform.position);
offset = gameObject.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePositio
n.x, Input.mousePosition.y, screenPoint.z));
}
Method ini dijalankan ketika mouse/ touch klik pada sebuah Gameobject
memiliki Collider. Method ini hanya sekali dijalankan ketika ada action dari
mouse/touch. Method ini menjalankan code yang berfungsi untuk melakukan
inisialisasi terhadap Gameobject dan mouse yang nanti nilai tersebut akan
digunakan untuk menggeser Gameobject tersebut.
void OnMouseDrag()
{
Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);
Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint) + offset;
transform.position = curPosition;
}
Method ini dijalankan ketika mouse/ touch klik dan tahan pada sebuah
Gameobject memiliki Collider. Method ini terus dijalankan sampai
melepaskan untuk klik Gameobject tersebut. Method ini menjalankan code
yang berfungsi untuk melakukan pemindahan posisi Gameobject berdasarkan
posisi mouse.
private void OnMouseUp()
{
transform.position = new Vector3(transform.position.x,firstY, transform.position.z);
}
Method ini dijalankan ketika mouse/ touch melepaskan klik pada sebuah
Gameobject memiliki Collider. Method ini hanya sekali dijalankan ketika
mouse/touch melepaskan klik terhadap Gameobject tersebut. Method ini
menjalankan kode yang berfungsi untuk mengembalikan posisi pada
Gameobject ke posisi awal.
Setelah Object Photo dan Video selesai, langkah selanjutnya adalah menyiapkan
GameObject Box untuk mendeteksi GameObject app (Photo dan Video)
Praktik : Menyimpan Data Score
1. Membuat Script baru dengan nama Data.cs di folder Scripts
Pembahasan Code:
public static int score;
Digunakan untuk menyimpan score yang dapat diakses langsung tanpa harus
deklarasi class nya. Class ini tidak menggunakan Monobehavior karena fungsi
dari Monobehavior tidak digunakan sehingga script kamu akan lebih efisien.
jika tidak dihapus juga tidak masalah dan juga tidak menyebabkan error.
using UnityEngine;
using UnityEngine.UI;
public class DeteksiSampah : MonoBehaviour
void Start()
MediaPlayerBenar = gameObject.AddComponent<AudioSource>();
MediaPlayerBenar.clip = audioBenar;
MediaPlayerSalah = gameObject.AddComponent<AudioSource>();
MediaPlayerSalah.clip = audioSalah;
if (collision.tag.Equals(nameTag))
Data.score += 25;
textScore.text = Data.score.ToString();
Destroy(collision.gameObject);
MediaPlayerBenar.Play();
else
Data.score -= 5;
textScore.text = Data.score.ToString();
Destroy(collision.gameObject);
MediaPlayerSalah.Play();
Pembahasan Code:
using UnityEngine.UI;
Digunakan untuk menyimpan score yang dapat diakses langsung tanpa harus
deklarasi classnya
Digunakan untuk menyimpan resources audio yang nanti diperoleh dari file
audio yang terdapat di Panel Project.
Digunakan untuk control audio baik itu untuk play, loop, pause dan stop.
Digunakan untuk menampilkan score yang telah didapat dan pastikan sudah
menambah library using UnityEngine.UI;
MediaPlayerBenar = gameObject.AddComponent<AudioSource>();
MediaPlayerBenar.clip = audioBenar;
MediaPlayerSalah = gameObject.AddComponent<AudioSource>();
MediaPlayerSalah.clip = audioSalah;
if (collision.tag.Equals(nameTag))
Data.score += 25;
textScore.text = Data.score.ToString();
Destroy(collision.gameObject);
MediaPlayerBenar.Play();
else
{
Data.score -= 5;
textScore.text = Data.score.ToString();
Destroy(collision.gameObject);
MediaPlayerSalah.Play();
Jika tag object yang masuk ke area Trigger adalah tidak sesuai dengan
namaTag, maka score akan dikurangi dan score akan ditampilkan ke textScore.
setelah itu object tersebut di-destroy dan audio untuk salah dijalankan.
Anda masih tidak dapat langsung menjalankan gamenya. Anda harus mengisi field
yang terdapat di Komponen script Deteksi. Lanjutkan ke langkah selanjutnya.
5. Masukkan Name Tag untuk GameObject Photo dengan name Tag “Photo”.
Pastikan besar kecil huruf benar dan sudah sudah sesuai dengan nama Tag yang telah
dibuat sebelumnya.
Setelah gameplay selesai dibuat, selanjutnya kita membuat tampilan Game Over ketika
object sampah gagal dipilah. Langkah-langkahnya sebagai berikut:
Praktik: Menambahkan Scene Gameplay ke Scene In Build
Scene yang dapat dipanggil di script hanya scene yang sudah ditambahkan di dalam
daftar Scenes in Build. Apabila masih terdapat SampleScene pada Build Settings, Anda
dapat menghapus dan menggantinya dengan Scene Gameplay saja.
Praktik : Membuat Scene Game Over
1. Membuat Scene baru dengan cara Klik Menu File > Pilih New Scene.
2. Setelah membuat scene baru maka tampil hierarchy dalam kondisi kosong. Kemudian
kita dapat membuat UI Gameover dengan memasukkan Sprite Gameover dari
folder Images di Panel Project ke Panel Hierarchy dengan cara Drag sprite tersebut.
3. Membuat Script baru di dalam folder Scripts dengan nama GameOver.
Saat masuk ke tampilan Gameover dan waktunya lebih dari 2 detik, maka game
akan reset seperti semua dan kembali ke Tampilan gameplay.
Penggunaan MethodSceneManager.LoadScene() harus memasukkan
library using UnityEngine.SceneManagement;
Depth Only jika berpindah halaman dari Gameplay ke Gameover, maka tampilan
backgorund di halaman Gameover merupakan tampilan terakhir dari Gameplay. Langkah
ini bersifat opsional.
Ketika Scene Gameover dijalankan, maka layer dibelakang text berwarna gelap dan
beberapa detik menuju ke scene gameplay.
7. Setelah membuat berhasil, simpan Scene yang telah dibuat dengan tekan Ctrl+S dan
beri Nama GameOver. Kemudian masukkan ke dalam daftar Scenes in Build di Build
Settings.
Praktik: Membuat Kondisi Gameplay menuju GameOver
1. Buka Scene Gameplay kemudian masuk kedalam folder Script dan
buka BatasAkhirSampah.cs.
2. Hilangkan tanda 2 slash ( “//” ) di dalam method OnTriggerEnter2D yang ada
didepan kode SceneManager.LoadScene(“GameOver”);. Kemudian jangan lupa untuk
simpan perubahan (Ctrl+S). Sehingga hasilnya sebagai berikut:
3. Supaya aplikasi dapat keluar ketika tekan Escape pada keyboard atau Back pada
device mobile, buatlah Script baru dengan nama Keluar.cs . Masukkan script seperti di
bawah ini :
. using System.Collections;
. using System.Collections.Generic;
. using UnityEngine;
. public class Keluar : MonoBehaviour
. {
. // Use this for initialization
. void Start()
. {
.
. }
.
. // Update is called once per frame
. void Update()
. {
. if (Input.GetKeyUp(KeyCode.Escape))
. {
. Application.Quit();
. }
. }
. }
Pembahasan Code:
if (Input.GetKeyUp(KeyCode.Escape))
{
Application.Quit();
}
Script ini berfungsi ketika keyboard menekan escape atau device mobile
menekan tombol back maka Aplikasi akan keluar.