• Tidak ada hasil yang ditemukan

How To Develop Game Labyrinth Shooter

N/A
N/A
Protected

Academic year: 2021

Membagikan "How To Develop Game Labyrinth Shooter"

Copied!
47
0
0

Teks penuh

(1)

How To Develop Game

Labyrinth Shooter

(2)

I. Pengenalan unity A. Install + Setup Unity

Klik 2x pada file installer Unity. Klik “Next” untuk melanjutkan.

(3)

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”.

(4)

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.

(5)

Splash Screen Unity 5.

(6)

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

(7)

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.

(8)

Pada jendela Inspector, klik kotak property Background pada komponen Camera. Pilih warna putih.

(9)

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.

(10)

Atur ukuran gambar sesuai keinginan dengan klik T dan drag n drop titik di sudut-sudut objek.

(11)

Buka script baru tersebut. Masukkan kode berikut.

Drag script ke dalam objek Canvas pada jendela Hierarchy. Buat Scene baru. Simpan dan beri nama Home. Klik File – Build Settings.

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"); } } }

(12)

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.

(13)

Buat objek Text untuk judul. Ganti isi tulisan, ukuran, dan jenis font dari Text tersebut melalui komponen Text di Inspector.

(14)

Buat script baru. Beri nama GUIButtons. Masukkan script berikut.

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.

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"); }

(15)

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.

(16)

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().

(17)

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.

(18)

Import beberapa package pada Unity, pada menu bar pilih “Assets” – “Import Package…” – “Custom Package…”.

(19)

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.

(20)

Setelah itu akan muncul kotak dialog seperti ini. Centang semuanya lalu klik “Import”.

(21)

Untuk Assets senapan, lakukan import package kembali seperti langkah sebelumnya – pilih file“Gun.unitypackage” lalu klik open.

(22)

Langkah berikutnya adalah membuat environment labirin. Untuk membuatlabirin, buat ObjekCube dengan memilih GameObject – 3D Object – Cube.

(23)

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.

(24)

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.

(25)

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.

(26)

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.

(27)

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.

(28)

Untuk mempercantik tampilan, tambahkan skybox dengan cara pilih Windiw – Lighting. Pada kolom Skybox pilih material Sunny.

(29)

Untuk memperingkas struktur hierarchy, buat sebuah gameobject empty baru dengan cara GameObject – Create Empty.

Lalu muncul Objek baru seperti di bawah.

(30)

Lalu letakkan semua Objekyang sudah dibuat sebelumnya menjadi child dari gameobject Labyrinth dengan cara drag n drop.

(31)

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).

(32)

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.

(33)

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.

(34)

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); }

(35)

Setelah itu buka folder CustomizableGun_FreeED – Prefab dan pilih senapan yang diinginkan.

Pilih salah satu senapan dan jadikan child gameobject Main Camera.

(36)

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);

} }

(37)

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.

(38)

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); } }

(39)

Setelah itu, masukkan objek peluru. Pada “Fire Effect” pilih Fire1

C. Score + Time

(40)

40 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();

}

public static int Target {

get { return Scoring.target; } set { Scoring.target = value; }

(41)

Jangan lupa menghapus komentar skrip Scoring pada skrip BULLET_ThermalDetonator

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; } } }

(42)

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();

} }

(43)
(44)

44 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; } void Update() { ApplyDeltaJoy();

(45)

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;

}

void LateUpdate() {

(46)

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.

void LateUpdate() { if (!troller.isGrounded) troller.Move(Vector3.down * 2); } }

(47)

Selanjutnya, buat script untuk menembakkan peluru.

Drag script tersebut ke objek Image untuk menembak. Tambahkan EventTrigger dan tambahkan Event PointerClick.

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); } }

Gambar

Gambar dibawah ini adalah tampilan default Unity.

Referensi

Dokumen terkait

Range IP dari pool tersebut akan digunakan oleh DHCP server untuk diberikan kepada device yang terkoneksi dengan jaringan VPN... Name : merupakan nama dari IP pool

Hujan tertinggi lainnya terjadi di Cikeusik – kabupaten Pandeglang tanggal 23 Nopember 2008 sebesar 102 mm Pada tanggal yang sama juga tercatat curah hujan melebihi 50

Dinamika pertumbuhan jumlah daun tanaman karet yang ditanam pada lahan pasca tambang di Kabupaten Kutai Kartanegara yang tidak diberi tanah asli untuk parameter

Menimbang, bahwa pada pokoknya Pemohon mendalilkan bahwa semula rumah tangga Pemohon dan Termohon berjalan rukun dan harmonis, namun sejak bulan Juli 2012

Bentuk visual yang diambil sama seperti gambar keseluruhan sticker dengan menambahkan lingkaran pembatas yang berwarna putih karena background yang diterapkan berwarna

Jika Anda telah memasang kartu layar yang kompatibel dengan DPM dari VESA atau menginstal perangkat lunak di komputer, maka monitor akan secara otomatis mengurangi penggunaan

Objek penelitian ini adalah berbagai jenis konjungsi subordinatif dalam bahasa Indonesia, khususnya, yang berfungsi menghubungkan klausa induk dengan klausa anak pada

Suatu pernyataan majemuk yang dibentuk dengan cara menggabungkan Suatu pernyataan majemuk yang dibentuk dengan cara menggabungkan dua pernyataan tunggal dengan