How To Develop Game Labyrinth Shooter 1
I. Pengenalan unity A. Install + Setup Unity Klik 2x pada file installer Unity. Klik Next untuk melanjutkan. Klik I Agree untuk menyetujui persetujuan ketika menginstall Unity. 2
Centang checkbox MonoDevelop lalu klik Next. MonoDevelop digunakan sebagai default text editor code pada Unity. Pilih folder tujuan untuk meletakkan file-file Unity dengan klik Browse. Setelah itu klik Intall. 3
Tunggu hingga selesai. Centang Run Unity 5 untuk membuka Untiy Catatan : Ketika pertama kali menginstall akan muncul dialog untuk memasukkan username dan password akun unity. 4
Splash Screen Unity 5. Tampilan awal Unity 5. Klik New Project untuk membuat project baru. 5
Masukkan nama project baru yang akan dibuat dan pilih lokasi penyimpanan project. Setelah selesai klik Create project. B. Interface Unity Gambar dibawah ini adalah tampilan default Unity. Keterangan : - Toolbar : Kumpulan tools yang di gunakan untuk editing objek di dalam game - Hieararchy : Jendela yang menampung semua objek yang dipakai di dalam game - Game : Jendela yang menampilkan hasil visual game dari kamera yang aktif - Scene : Jendela yang menammpilkan lingkungan game secara keseluruhan - Project : Jendela yang merupakan file explorer untuk memanajemen file-file - Inspector : Jendela yang menampilkan properti yang dimiliki oleh objek yang dipilih 6
II. GUI Game GUI Splash Screen Siapkan gambar untuk splash screen. Kita akan memanfaatkan fasilitas UI yang diberikan Unity. Buat scene baru. Simpan scene baru tersebut. Beri nama SplashScreen. Ganti warna latar belakang dari game. Klik Main Camera pada jendela Hierarchy. 7
Pada jendela Inspector, klik kotak property Background pada komponen Camera. Pilih warna putih. Buat objek Image melalui menu GameObject UI. 8
Akan muncul kotak putih di layar. Perlu diperhatikan objek UI hanya bisa tampil di area Canvas (kotak dengan garis tepi berwarna putih). Lihat ke jendela Inspector dan cari komponen Image. Pada property Source Image, klik lingkaran kecil di sebelah kanan. Cari gambar yang akan dijadikan logo pada splash screen. 9
Atur ukuran gambar sesuai keinginan dengan klik T dan drag n drop titik di sudut-sudut objek. Buat script baru. Pada jendela Project, klik Create C# Script. Beri nama SplashScreenTimer. 10
Buka script baru tersebut. Masukkan kode berikut. using UnityEngine; using System.Collections; public class SplashScreenTimer : MonoBehaviour public float splashscreentimer = 2f; // Use this for initialization void Update () splashscreentimer -= Time.deltaTime; if (splashscreentimer < 0) Application.LoadLevel("Home"); Drag script ke dalam objek Canvas pada jendela Hierarchy. Buat Scene baru. Simpan dan beri nama Home. Klik File Build Settings. 11
Drag dua scene yang baru saja kita buat ke dalam bagian Scenes In Build. Letakkan scene SplashScreen di urutan paling atas (index 0). Jalankan Game. GUI Home and Scene Transtition Buka scene Home. Buat objek Image untuk UI background. Pilih gambar yang diinginkan. Buat ukurannya sesuai dengan ukuran Canvas. 12
Buat objek Text untuk judul. Ganti isi tulisan, ukuran, dan jenis font dari Text tersebut melalui komponen Text di Inspector. Buat lagi objek Text untuk tombol Play dan Help. 13
Buat script baru. Beri nama GUIButtons. Masukkan script berikut. using UnityEngine; using System.Collections; public class GUIButtons : MonoBehaviour public void GoToPlay() Application.LoadLevel("Main"); public void GoToHelp() Application.LoadLevel("Help"); public void BackToHome() Application.LoadLevel("Home"); Drag script yang baru dibuat ke dalam objek Canvas. Klik objek Text untuk tombol Play. Klik Component-Event-Event Trigger. Pada jendela Inspector, klik Add New Event Type pada komponen Event Trigger. Pilih PointerClick. 14
Akan muncul event baru pada komponen tersebut. Klik tanda (+) di pojok bawah event tersebut. Drag objek Canvas untuk tombol Play ke dalam kotak di bawah menu drop-down Runtime Only. Klik drop-down No Function. Pilih GUIButtons, dan pilih GoToPlay(). 15
Lakukan kembali langkah 7 hingga 11 untuk tombol Help. Ganti fungsinya dengan GoToHelp(). Buat 2 scene baru. Beri nama Main dan Help. Masukkan 2 scene tersebut ke dalam ScenesInBuild. Jalankan. Masuk ke dalam scene Help. Tambahkan background, judul, dan tombol Back. Drag script GUIButtons ke objek Canvas. Tambahkan Event Trigger pada tombol dan masukkan fungsi BackToHome(). 16
III. Environment (Labyrinth) Untuk persiapan, buat beberapa folder untuk menampung assets (Gambar, Musik, Suara, Code dan lain-lain) yang akan digunakan dalam game. Untuk membuat folder, Klik Kanan pada jendela project pilih Create lalu Folder pada Project. Buat beberapa folder seperti di bawah. 17
Import beberapa package pada Unity, pada menu bar pilih Assets Import Package Custom Package. Pilih file SkyBox+Particles.unitypackage lalu klik open. 18
Setelah itu akan muncul kotak dialog seperti ini. Centang semuanya lalu klik Import. Untuk Assets senapan, lakukan import package kembali seperti langkah sebelumnya pilih file Gun.unitypackage lalu klik open. 19
Setelah itu akan muncul kotak dialog seperti ini. Centang semuanya lalu klik Import. Setelah import selesai, makaakanmuncul folder baru CustomizableGun_FreeED 20
Untuk Assets senapan, lakukan import package kembali seperti langkah sebelumnya pilih file Gun.unitypackage lalu klik open. Setelah itu akan muncul kotak dialog seperti ini. Centang semuanya lalu klik Import. 21
Langkah berikutnya adalah membuat environment labirin. Untuk membuatlabirin, buat ObjekCube dengan memilih GameObject 3D Object Cube. Setelah itu muncul Objek kubus seperti di bawah ini. 22
Lalu jadikan Objek kubus sebagai Objektanah untuk labirin. Atur ukuran kubus menjadi pipih seperti di bawah ini. Untuk lebih mudah, dapat langsung mengatur Transform dari kubus tersebut dan mengubah nama menjadi Ground seperti pada gambar di bawah. Tambahkan Component Rigidbody pada kubus tersebut dengan cara Add Component dan cari Rigidbody. 23
Lalu centang Is Kinematic pada komponen Rigidbody. Lalu tambahkan tekstur rumput pada Ground. Sebelum itu tambahkan gambar tekstur ke proyek Unity dengan cara drag n drop ke proyeknya dan arahkan ke folder Texture. Lalu drag n drop tekstur rumput tersebut ke Objekkubus Ground. Setelah selesai, maka ObjekGround akan memiliki tekstur seperti gambar di bawah. 24
Objek Ground sudah terbentuk. Setelah itu buat Objek kubus lagi untuk membuat dindingnya dan ubah nama kubus tersebut menjadi Wall. Jangan lupa tambahkan komponen Rigidbody juga pada Objek Wall dan centang Is Kinematic. Lalu tambahkan tekstur batu bata pada Wall. Sebelum itu tambahkan gambar tekstur batu bata ke proyek Unity dengan cara drag n drop ke proyeknya lalu arahkan ke folder Texture. 25
Setelah selesai, maka ObjekWall akan nampak seperti gambar di bawah. Lalu setting ukuran kubus Wall sehingga menyerupai dinding pada labirin. Gunakan icon untuk melakukan rotasi, pergeseran dan perbesaran. Lalu atur dinding labirin hingga nampak seperti gambar di bawah ini. 26
Untuk membuat tampilan tidak gelap, maka tambahkan lampu dengan cara klik GameObject pilih Light Directional Light Lalu akan muncul lampu pada tampilan permainan. Atur lampu agar berada di atas labirin sehingga tampilan permainan nampak terang. 27
Untuk mempercantik tampilan, tambahkan skybox dengan cara pilih Windiw Lighting. Pada kolom Skybox pilih material Sunny. Lalu tambahkan skybox sehingga tampilan ketika dijalankan seperti ini. 28
Untuk memperingkas struktur hierarchy, buat sebuah gameobject empty baru dengan cara GameObject Create Empty. Lalu muncul Objek baru seperti di bawah. Ubah nama gameobject tersebut menjadi Labyrinth dan atur transformnya. 29
Lalu letakkan semua Objekyang sudah dibuat sebelumnya menjadi child dari gameobject Labyrinth dengan cara drag n drop. 30
IV. Character A. Input Character + Target Buat gameobject empty baru dengan nama Player. Tambahkan komponen Character Controller pada gameobject Player dan atur transform playernya (sesuaikan dengan ukuran Ground). 31
Buat gameobject Main Camera menjadi child dari gameobject Player. Lalu tambahkan Kursor pada proyek dengan cara drag n drop file lalu arahkan ke folder Texture. UbahTexture Type menjadi Sprite (2D and UI) dan klik Apply 32
Setelah itu, jadikan Objekkursor menjadi child dari Main Camera dengan cara drag n drop ke Hierarchy. Setelah itu buat skrip FirstPersonController pada folder Script dengan Klik Kanan Create C# Script. 33
Berikut adalah isi dari skrip FirstPersonScript. Masukkan ke objek Player. using UnityEngine; using System.Collections; public class FirstPersonController : MonoBehaviour public float movementspeed = 5.0f; public float mousesensitivity = 5.0f; public float jumpspeed = 20.0f; float verticalrotation = 0; public float updownrange = 60.0f; float verticalvelocity = 0; CharacterController charactercontroller; // Use this for initialization void Start () Screen.lockCursor = true; charactercontroller = GetComponent<CharacterController>(); // Update is called once per frame void Update () // Rotation float rotleftright = Input.GetAxis("Mouse X") * mousesensitivity; transform.rotate(0, rotleftright, 0); verticalrotation -= Input.GetAxis("Mouse Y") * mousesensitivity; verticalrotation = Mathf.Clamp(verticalRotation, -updownrange, updownrange); Camera.main.transform.localRotation = Quaternion.Euler(verticalRotation, 0, 0); // Movement float forwardspeed = Input.GetAxis("Vertical") * movementspeed; float sidespeed = Input.GetAxis("Horizontal") * movementspeed; verticalvelocity += Physics.gravity.y * Time.deltaTime; if( charactercontroller.isgrounded && Input.GetButton("Jump") ) verticalvelocity = jumpspeed; Vector3 speed = new Vector3( sidespeed, verticalvelocity, forwardspeed ); speed = transform.rotation * speed; charactercontroller.move(speed * Time.deltaTime); 34
Setelah itu buka folder CustomizableGun_FreeED Prefab dan pilih senapan yang diinginkan. Pilih salah satu senapan dan jadikan child gameobject Main Camera. Atur letak senapan sehingga tampilan permainan menjadi seperti ini. 35
B. Shooting Lalu buat skrip FP_Shooting. Masukkan ke objek Player Berikut adalah isi dari skrip FP_Shooting. using UnityEngine; using System.Collections; public class FP_Shooting : MonoBehaviour public GameObject bullet_prefab; float bulletimpulse = 50f; // Use this for initialization void Start () // Update is called once per frame void Update () if( Input.GetButtonDown("Fire1")) //SoundManager.Fire(); Camera cam = Camera.main; GameObject thebullet = (GameObject)Instantiate(bullet_prefab, cam.transform.position + cam.transform.forward, cam.transform.rotation); thebullet.rigidbody.addforce( cam.transform.forward * bulletimpulse, ForceMode.Impulse); 36
Lihat pada gameobject player, maka akan ada komponen yang belum terisi. Isi dengan prefab peluru. Maka peluru sudah dapat dilontarkan dari senapan. Tambahkan target yang ada pada folder Model. Letakkan pada sudut sudut. 37
Buat skrip BULLET_ ThermalDetonator. using UnityEngine; using System.Collections; public class BULLET_ThermalDetonator : MonoBehaviour float lifespan = 3.0f; public GameObject fireeffect; // Use this for initialization void Start () // Update is called once per frame void Update () lifespan -= Time.deltaTime; if(lifespan <= 0) Explode(); void OnCollisionEnter(Collision collision) if(collision.gameobject.tag == "Enemy") collision.gameobject.tag = "Untagged"; collision.transform.getchild(0).gameobject.setactive(true); //Scoring.Target++; Destroy(gameObject); void Explode() Destroy(gameObject); 38
Setelah itu, masukkan objek peluru. Pada Fire Effect pilih Fire1 C. Score + Time Tambahkan Objekcanvas, pilih GameObject UI Canvas 39
Tambahkan text sebagai child dari gameobject Canvas dan beri nama seperti di bawah ini. (GameObject UI - Text) Buat Skrip Scoring. Lalu masukkan skrip Scoring kedalam objek Canvas. using UnityEngine; using UnityEngine.UI; using System.Collections; public class Scoring : MonoBehaviour private static int target; private static float limit; private string condition; private Text targettext; private Text limittext; private Text conditiontext; private bool isgameover; // Use this for initialization void Start () limit = 60f; target = 0; targettext = this.transform.getchild(0).getcomponent<text>(); limittext = this.transform.getchild(1).getcomponent<text>(); conditiontext = this.transform.getchild(2).getcomponent<text>(); //conditiontext.active = false; isgameover = false; // Update is called once per frame void Update () if (!isgameover) if (limit >= 0f) limit -= Time.deltaTime; int limitcast = (int) limit; targettext.text = "Target: " + target + "/5"; limittext.text = "Time: " + limitcast; conditiontext.text = condition; ConditionMethod(); 40
public static int Target get return Scoring.target; set Scoring.target = value; public static float Limit get return Scoring.limit; set Scoring.limit = value; private void ConditionMethod() if(target == 5) condition = "WIN"; // conditiontext.active = true; isgameover = true; else if(limit <= 0f) condition = "LOSE"; // conditiontext.active = true; isgameover = true; Jangan lupa menghapus komentar skrip Scoring pada skrip BULLET_ThermalDetonator 41
V. Sound Masukkan file-file suara yang dibutuhkan pada folder Sound. Masukkan ambience_planetscape_forest pada Main Camera lalu atur pengulangannya dengan centang Loop. Buat objek baru lalu masukkan pada main camera. Setelah itu, masukkan skrip SoundManager dan fire_gun1_rank1 pada objek SoundManager. using UnityEngine; using System.Collections; public class SoundManager : MonoBehaviour private static AudioSource gun; // Use this for initialization void Start () gun = this.getcomponent<audiosource>(); // Update is called once per frame void Update () public static void Fire() gun.play(); 42
Hilangkan komentar SoundManager.Fire(); pada FP_Shooting. 43
VI. Export to Android Pada objek Player, nonaktifkan komponen FirstPersonController dan FP_Shooting. Siapkan asset yang digunakan sebagai joystick control dan tombol untuk menembak. Buat beberapa objek UI Image. Objek UI ini akan digunakan sebagai touch control. Susun seperti pada gambar di bawah. Bagian kiri untuk movement, bagian kanan untuk menembak dan look around. Buat script baru. Beri nama JoystickControl. Masukkan script berikut. using UnityEngine; using System.Collections; public class JoystickControl : MonoBehaviour public enum JoystickType Movement, LookRotation; public JoystickType joysticktype; public Transform player = null; public float playerspeed = 2f, maxjoydelta = 0.05f, rotatespeed = 100.0f; private Vector3 orijoypos, joydelta; private RectTransform joytrans = null; public CharacterController troller; private float pitch = 0.0f, yaw = 0.0f; private Vector3 orotation; private bool isrotating; void Start() joytrans = this.getcomponent<recttransform>(); orijoypos = joytrans.position; orotation = player.eulerangles; pitch = orotation.x; yaw = orotation.y; 44
void Update() ApplyDeltaJoy(); public void Dragging() isrotating = true; joytrans.position = MoveJoystick(); ApplyDeltaJoy(); public void OnEnded() isrotating = false; joytrans.position = orijoypos; joydelta = new Vector3(0, 0, 0); void ApplyDeltaJoy() switch (joysticktype) case JoystickType.Movement: troller.move((player.forward * joydelta.y + player.right * joydelta.x) * playerspeed * Time.deltaTime); break; case JoystickType.LookRotation: if (isrotating) pitch -= joydelta.y * rotatespeed * Time.deltaTime; yaw += joydelta.x * rotatespeed * Time.deltaTime; else pitch = 0; yaw = 0; pitch = Mathf.Clamp(pitch, -80, 80); player.eulerangles += new Vector3(pitch, yaw, 0.0f); break; Vector3 MoveJoystick() Debug.Log(Input.touchCount); float x = Input.GetTouch(Input.touchCount-1).position.x; float y = Input.GetTouch(Input.touchCount - 1).position.y; Vector3 position = new Vector3(Mathf.Clamp(x, orijoypos.x - maxjoydelta, orijoypos.x + maxjoydelta), Mathf.Clamp(y, orijoypos.y - maxjoydelta, orijoypos.y + maxjoydelta), 0); joydelta = new Vector3(position.x - orijoypos.x, position.y - orijoypos.y, 0); return position; 45
void LateUpdate() if (!troller.isgrounded) troller.move(vector3.down * 2); Drag script tersebut ke kedua objek Image bergambar lingkaran biru. Klik Image lingkaran biru bagian kiri. Pada bagian Inspector, lihat komponen Joystick Control. Pilih Movement untuk Joystick Type. Drag objek Player ke property Player dan Property Troller. Selanjutnya isikan property lainnya seperti pada gambar di bawah. Lakukan hal yang sama untuk lingkaran biru bagian kanan. Namun, pada pilihan Joystick Type, pilih LookRotation. Tambahkan Komponen EventTrigger untuk masing-masing objek Image lingkaran biru. Tambahkan Event Drag dan PointerUp. Klik tanda (+) pada Event Drag. Drag objek Image lingkaran biru ke Event tersebut. Selanjutnya pilih fungsi Dragging. Lakukan hal yang sama untuk Event PointerUp dan tambahkan fungsi OnEnded. 46
Selanjutnya, buat script untuk menembakkan peluru. using UnityEngine; using System.Collections; public class FireButton : MonoBehaviour public GameObject bullet_prefab; float bulletimpulse = 50f; public void Fire() SoundManager.Fire(); Camera cam = Camera.main; GameObject thebullet = (GameObject)Instantiate(bullet_prefab, cam.transform.position + cam.transform.forward, cam.transform.rotation); thebullet.getcomponent<rigidbody>().addforce(cam.transform.forward * bulletimpulse, ForceMode.Impulse); Drag script tersebut ke objek Image untuk menembak. Tambahkan EventTrigger dan tambahkan Event PointerClick. 47