Konsep memprogram di Unity

Coding di Unity bisa menggunakan 3 bahasa pemrograman. Kamu bisa memilih C# (baca: si-sharp), Javascript, atau Boo (mirip Python). Ketiga bahasa ini didukung penuh dan masing-masing dapat memanggil library yang dimiliki Unity. Untuk kemudahan dalam penulisan di buku ini maka seluruhnya akan dijelaskan menggunakan C#.

Unity menggunakan component based dalam pendekatan pemrogramannya. Bagi kamu yang sudah terbiasa dengan object oriented programming (OOP) mungkin akan terasa aneh pada awalnya. Untuk menjembatani antara ketidakbiasaan ini saya akan menjelaskan persamaan dan perbedaan keduanya. Pertama-tama saya akan mengilustrasikan penggunaan OOP.

Object Oriented Programming

Suatu hari kamu ingin membuat sebuah game petualangan. Kamu memiliki sebuah petarung sebagai karakter dari pemain. Kamu membayangkan petarung memiliki nyawa (health point) dan bisa bergerak. Kemudian kamu membuat sebuah kelas Karakter untuk mengakomodir semua itu.

Petarung [Attribut: (integer) healthPoint. Method: move()]

Tidak berapa lama kemudian kamu mulai membayangkan untuk membuat monster yang harus diserang oleh petarung kamu. Monster juga memiliki memiliki nyawa dan bisa bergerak. Karena memiliki kesamaan sifat tersebut maka kamu membuat kelas induk bernama Makhluk, sedangkan kelas Monster dan Petarung merupakan anak dari kelas Makhluk. Desain kelas kamu kemudian menjadi seperti ini:

Makhluk [Attribut: (integer) healthPoint. Method: move()]
  +<inherit> Petarung
  +<inherit> Monster

Agar dapat mengalahkan monster, petarung kamu harus bisa menyerang dengan cara melakukan sihir. Maka kamu membuat metode sihir() di kelas Petarung.

Makhluk [Attribut: (integer) healthPoint. Method: move()]
  +<inherit> Petarung [Method: sihir()]
  +<inherit> Monster

Monster yang kamu buat pun bisa menyerang dengan sihir.

Makhluk [Attribut: (integer) healthPoint. Method: move()]
  +<inherit> Petarung [Method: sihir()]
  +<inherit> Monster [Method: sihir()]

Karena kamu menganggap semua anak Makhluk dapat menyihir maka kamu mendesain ulang susunan kelas menjadi seperti ini:

Makhluk [Attribut: (integer) healthPoint. Method: move(), Method: sihir()]
  +<inherit> Petarung
  +<inherit> Monster

Tak lama kemudian kamu membuat sebuah karakter Hantu yang hanya bisa bergerak, tapi tidak memiliki health point namun bisa menyihir. Kamu bisa merombak lagi desain kelas-kelas kamu menggunakan interface Health… atau mengganti kelas induknya… dan sebagainya.

Component Based

Daripada memecah setiap karakter, kenapa tidak memecah fungsionalnya saja? Sebagai contoh, Petarung memiliki komponen HealthMove, dan Magic. Kemudian Monster memiliki komponen yang sama dengan karakter. Sedangkan untuk karakter Hantu kamu cukup menambahkan komponen Move dan Magic saja. Berarti kamu cukup membuat 3 komponen saja sebagai berikut:

Health
Move
Magic

Keuntungan Menggunakan Component Based

Component based terasa lebih sederhana. Selain itu di Unity setiap komponen akan terlihat terpisah di window Inspector. Kamu juga bisa mengedit variabel yang dibuat public pada window ini. Hal ini sangat penting untuk melakukan balancing pada permainan kamu.

Screen Shot 2015-03-16 at 4.31.17 PM
Script “UlarControl” ada di window Inspector dan dapat diedit variabel public nya seperti “Rotate Speed”, “Speed Ratio”, dan sebagianya untuk kebutuhan balancing

Selain itu jika kamu memiliki karakter baru, katakanlah Kucing, kamu cukup menambahkan komponen bergerak. Mudah sekali bukan?

 

 

Bahan bacaan lain yang menarik untuk menjelaskan tentang penggunaan component based ini bisa kamu lihat di tautan berikut:

http://gamedevelopment.tutsplus.com/articles/unity-now-youre-thinking-with-components–gamedev-12492


[[Daftar Isi]]

GUI

Unity memiliki fitur membuat GUI yang bisa digunakan pada game 2D maupun 3D. Di subbab ini akan dibahas gambaran umum GUI dan penggunaannya.

GUI

GUI merupakan singkatan dari Graphical User Interface. Kegunaannya sebagai tampilan masukan dari pemain. Di Unity pembuatan GUI bisa digunakan di sub menu GameObject > UI.

Screen Shot 2015-03-12 at 12.12.11 AM
Beragam UI yang disediakan

 

 

Pengenalan UI

Sebagai perkenalan, mari kita coba dengan membuat komponen UI baru berupa Button.

Screen Shot 2015-03-12 at 12.25.20 AM
Game object yang baru dibuat

GameObject UI yang baru akan muncul di window Hierarchy; antara lain Canvas, Button yang tadi kita pilih, dan EventSystem. EventSystem digunakan oleh UI untuk mendeteksi masukan seperti sentuhan, kontrol, dan sebagainya. Penggunaan UI lebih banyak digunakan di dalam Canvas.

Canvas bertindak sebagai representasi dari tampilan layar. Jika dilihat pada window Game, posisi UI yang berada di dalam kanvas akan sesuai dengan posisi kanvas.Screen Shot 2015-03-12 at 12.27.25 AMSetiap game object UI memiliki komponen bernama Rect Transform. Pada komponen ini UI memiliki pengaturan dimensi. Pada komponen ini juga terdapat fitur Anchor Presets. Fitur ini berguna untuk memposisikan komponen relatif terhadap ukuran kanvas. Hal ini berguna untuk ukuran layar yang berbeda-beda sehingga game yang dibuat memiliki posisi GUI yang konsisten.

Anchor Presets
Anchor Presets

Informasi Detail

Penjelasan lebih detail mengenai penggunaan GUI bisa kamu temui di link berikut:

  1. Unity New GUI Tutorial
  2. Modul UI Unity
  3. UI Reference

 

[[Daftar Isi]]

UserPrefs

Pendahuluan

Salah satu fitur yang sering dijumpai dalam game adalah highscore. Highscore ini harus disimpan dalam database supaya bisa dibandingkan dengan skor pemain sebelumnya. Cara paling sederhana untuk menyimpan database seperti ini adalah menggunakan UserPrefs.

Praktikum

Nah, kali ini kita akan mencoba UserPrefs dengan membuat load highscore sederhana.

Buat project baru

Buat project baru. Beri nama DBProject dan setting menggunakan proyek 2D.

Penggunaan 2D hanya untuk kemudahan tutorial ini saja. Kamu boleh menggunakan 3D juga kok.

Screen Shot 2015-03-09 at 10.21.53 PM

Buat GameObject

Buat GameObject baru, kemudian beri nama DBController.

Screen Shot 2015-03-09 at 10.45.07 PM
Buat empty GameObject

 

Screen Shot 2015-03-09 at 10.45.46 PM
Beri nama menjadi DBController

Beri komponen Script

Pilih GameObject DBController, kemudian beri komponen script dengan nama DBScript menggunakan bahasa C#.

Screen Shot 2015-03-09 at 10.50.00 PM

 

Kemudian masukkan script ini di DBScript

using UnityEngine;
using System.Collections;

public class DBScript : MonoBehaviour {
	
	// Use this for initialization
	void Start () {
		//dapatkan highscore
		int highScore = PlayerPrefs.GetInt("HighScore");

		//tampilkan highscore di log
		Debug.Log(highScore);

		//kita tambahkan score sebelumnya
		highScore = highScore + 1;

		PlayerPrefs.SetInt("HighScore", highScore);
	}
	
	// Update is called once per frame
	void Update () {
	
	}
}

Mari kita perhatikan satu persatu.

  1. PlayerPrefs.GetInt digunakan untuk mendapatkan data bertipe integer dengan key data “HighScore.” Ada banyak jenis get seperti string, float, dan sebagainya. Detailnya bisa kamu lihat di dokumentasi dari Unity tentang PlayerPrefs.
  2. PlayerPrefs.SetInt mengganti data dengan key data “HighScore” menjadi data baru yang telah kita tambahkan.

Key yang digunakan dalam script ini adalah “HighScore.” Kamu bisa menggantinya dengan nama lain. Misalnya “HighScore-1” atau “HighScoreBudi” dan sebagainya.

Test play

Coba tekan play dan lihat hasilnya di Console. Di saat pertama akan ditampilkan angka 0 seperti ini:

Screen Shot 2015-03-09 at 10.59.02 PMKemudian coba stop game dan tekan lagi tombol play. Console akan menghasilkan keluaran berikut:

Screen Shot 2015-03-09 at 10.59.28 PM

Lihat! Angkanya bertambah!

Kesimpulan

Secara sederhana itulah cara menggunakan PlayerPrefs. Kamu bisa membuat penggunaan UserPrefs sedikit lebih kompleks hanya dengan menggunakan key yang unik, atau bahkan menyimpan array dalam PlayerPrefs

 


[[Daftar Isi]]

Struktur Proyek Unity

Saat memulai proyek, tab Project akan memiliki folder Assets yang kosong. Agar saat mengerjakan game file-file yang kamu gunakan tersimpan rapi, ada baiknya untuk menyimpannya dalam sub-sub kategori folder tertentu.

Untuk membuat folder baru, cukup klik kanan di area kosong tab project dan pilih new folder. Contoh gambar untuk membuat folder baru seperti gambar di bawah ini.

Screen Shot 2015-03-02 at 10.08.19 PM
Membuat folder baru

Berikut susunan yang saya sarankan:

  • Scenes, tempat menaruh scene.
  • Scripts, tempat menaruh script. Di dalamnya bisa ada sub folder lagi untuk script dengan kerja tertentu.
  • Images, tempat menaruh gambar-gambar.
  • Sounds, tempat menaruh suara-suara yang dibutuhkan.
  • Animations, tempat menaruh animasi.
  • Prefabs, tempat menaruh game object yang sudah di prefabricate.

Susunan folder di sini tidak saklek dan harus diikuti setiap saat. Kamu bisa membuat susunan folder sesuai keinginanmu sendiri.

[[Daftar Isi]]

Mengenal Tampilan Unity

Daftar isi

Saat membuka Unity, kamu akan disuguhi tampilan Unity dengan banyak sekali pilihan tombol. Sebelum mulai kebingungan, mari kita lihat menu-menu umum yang sering dipakai.

Project Wizard

Screen Shot 2015-03-09 at 10.21.53 PM

Project wizard digunakan untuk memulai project pertama kali. Kamu bisa memasukkan nama proyek yang kamu buat serta package bawaan Unity untuk mempermudah pembuatan game. Untuk permulaan, kamu bisa tidak memilih package apapun.

Tampilan Unity

Saat memulai project kamu akan ditampilkan tampilan sebagai berikut.

Screen Shot 2015-03-02 at 9.19.52 PMTampaknya aneh ya? Mari kita lihat satu per satu.

Oh, karena gambar di sini terlalu kecil, perhatikan juga posisinya di program Unity pada komputer kamu :p

  1. Tab Scene, di sini kamu menaruh gambar-gambar dan objek yang ingin dijadikan tampilan utama dalam permainan
  2. Tab Game, jika tombol “play” di tekan, disini game yang kamu buat bisa dicoba.
  3. Tab Project, tempat asset-asset mulai dari script sampai gambar kamu berada
  4. Tab Console, tempat kamu bisa logging hasil kodingan yang kamu buat
  5. Tab Hierarchy, tempat objek-objek yang kamu taruh di scene
  6. Tab Inspector, tempat kamu melakukan setting pada game.
  7. Tombol play, untuk memulai game yang kamu buat dan dimainkan di tab game.
  8. Tombol pause, menghentikan game sementara. Tombol ini sangat berguna untuk debugging
  9. Tombol step. Dengan tombol ini kamu memajukan “satu waktu” dalam game. Tombol ini juga sangat bagus untuk digunakan dalam debugging

Tampilan MonoDevelop

Untuk kode editor Unity menyediakan MonoDevelop. Tampilan MonoDevelop adalah sebagai berikut:

Screen Shot 2015-03-09 at 11.21.55 PM

Kamu juga bisa menggunakan Visual Studio untuk mengedit kode untuk script Unity

[[Daftar Isi]]

Memulai Proyek

Yes! Let’s get started! Di bab ini kita akan membahas tentang menu dan fitur-fitur yang ada di Unity. Kemudian setelah itu kamu akan disuguhi struktur folder-folder yang disiapkan dalam membuat game supaya rapi. Di bagian akhir saya akan menunjukkan konsep memprogram component based yang ada di Unity.

Di buku ini saya menggunakan C# sebagai bahasa pemrogramannya karena saya sudah terbiasa menggunakan bahasa ini.

[[Daftar Isi]]