Anda di halaman 1dari 13

LAPORAN AKHIR

GAME DEVELOPMENT

“Battle Tank Arena”

Oleh

I Komang Migran Widiantara

NIM 1515051061/6A

JURUSAN PENDIDIKAN TEKNIK INFORMATIKA

FAKULTAS TEKNIK DAN KEJURUAN

UNIVERSITAS PENDIDIKAN GANESHA

SINGARAJA

2018
PEMBUATAN GAME
“BATTLE TANK ARENA”
A. Software Pendukung
a. Unity
Unity merupakan engine utama yang digunakan dalam
pembuatan game “Battle Tank Arena”. Alasan memilih Unity
karena adanya banyak tutorial yang dapat membantu dalam
penyelesaian sintak-sintak yang tidak dipahami. Berikut tampilan
dari engine Unity tersebut.

b. Tiled
Tiled digunakan untuk membangun sebuah envirotment atau
map agar lebih mudah dan cepat. Keunggulan dari software ini bias
langsung menambah collision dan boundary sehingga tidak perlu
menambahkan lagi pada unity. Berikut tampilan software Tiled.
c. Tiled2Unity
Tiled2Unity merupakan plugin untuk melakukan import
map yang sudah kita buat menggunakan software Tiled. Berikut
tampilan Tiled 2Unity.

B. Game Asset
a. Sprite
i. Player

ii. Bullet

b. Tile
Tile digunakan dalam pembuatan peta atau map. Untuk
kedua asset tersebut bias didownload pada situs kenny.nl
C. Pembuatan Game
a. Map
Pembuatan map menggunakan Tiled kemudian di import
menggunakan Tiled2Unity sehingga lebih mudah dan cepat dalam
pembuatan map.

b. Sprite
Untuk pembuatan sprite saya mendownload asset yang
sudah ada pada situs kanny.nl. untuk editingnya saya menggunakan
sprite editor.
c. Setup Player
Untuk setup pada player ada beberapa hal yang perlu
ditambahkan pada sprite player. Tambahkan komponen yang
ditunjukkan pada gambar dibawah ini.

 Network Identity berfungsi untuk memberikan identitas pada


masing-masing player.

 Neteork transform berfungsi untuk melakukan sinkronisasi


gerakan player.

 Rigidbody 2D berfungsi memberikan gravitasi dan pengaturan


masa.
 Polygon Collider 2D berfungsi untuk menambahkan collid
pada area player agar bias terjadi benturan.

Untuk menambahkan gerakan, menembak, dan health ada


beberapa script yang diperlukan yakni sebagai berikut.

 Player Movement berfungsi memberikan gerakan pada player.


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;

public class PlayerMovement : NetworkBehaviour {

public float maxSpeed = 5f;


public float rotSpeed = 180f;
public Camera myCamera;
public AudioClip move;
void Start () {
myCamera.depth = 0;

if (isLocalPlayer){
myCamera.depth = 1;
}

bool isLocal () {
return isLocalPlayer;
}

void FixedUpdate () {
// Rotate Tank
if (!isLocalPlayer)
{
return;
}
Quaternion rot = transform.rotation;

float z = rot.eulerAngles.z;

z -
= Input.GetAxis ("Horizontal") * rotSpeed * Time.del
taTime;

rot = Quaternion.Euler ( 0, 0, z);

transform.rotation = rot;
z -
= Input.GetAxis ("Horizontal") * rotSpeed * Time.del
taTime;

rot = Quaternion.Euler ( 0, 0, z);

transform.rotation = rot;

Vector3 pos = transform.position;

Vector3 velocity = new Vector3( 0, Input


.GetAxis ("Vertical") * maxSpeed * Time.deltaTime );

pos += rot * velocity;

transform.position = pos;

void OnCollisionEnter2D(Collision2D other)


{
if (other.gameObject.CompareTag("Player"))
{
Debug.Log ("Tersentyuh");
}
}

 Player Shooting berfungsi untuk menembak dan memunculkan


peluru.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;

public class PlayerShooting : NetworkBehaviour{


public Vector3 bulletOffset = new Vector3 (0, 0.
5f, 0);
public GameObject bulletPrefab;
public Transform bulletSpawn;
public float fireDelay = 0.25f;
public float maxSpeed = 5f;
float cooldownTimer = 0;
public AudioClip fire;

void Start () {

// Update is called once per frame


void Update () {

if (isLocalPlayer) {
cooldownTimer -= Time.deltaTime;
if (Input.GetButtonDown ("Fire1") && coo
ldownTimer <= 0) {
CmdFire ();
AudioSource audio = GetComponent<Aud
ioSource> ();
audio.PlayOneShot (fire);
}
// Update is called once per frame
void Update () {

if (isLocalPlayer) {
cooldownTimer -= Time.deltaTime;
if (Input.GetButtonDown ("Fire1") && coo
ldownTimer <= 0) {
CmdFire ();
AudioSource audio = GetComponent<Aud
ioSource> ();
audio.PlayOneShot (fire);
}
}
}

[Command]
void CmdFire(){
Debug.Log ("Pew");
cooldownTimer = fireDelay;

Vector3 offset = transform.rotation * new Ve


ctor3 (0, 0.5f, 0);

var bullet = (GameObject)Instantiate (bullet


Prefab, bulletSpawn.position + offset, bulletSpawn
.rotation);

bullet.GetComponent<Rigidbody2D> ().velocity
= bullet.transform.up * maxSpeed;
NetworkServer.Spawn (bullet);
Destroy (bullet, 2.0f);
}
}

 Health berfungsi untuk untuk memberikan status darah dan


scoring serta player saat mati.
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Networking;
using System.Collections;

public class Health : NetworkBehaviour {

public const int maxHealth = 100;


public int scoreValue = 10;

[SyncVar(hook = "OnChangeHealth")]
public int currentHealth = maxHealth;

public RectTransform healthBar;

public GameObject myHealth;

public GameObject result;


public GameObject lose;

void Start () {
if (isLocalPlayer) {
myHealth.gameObject.SetActive (true);
} else {
myHealth.gameObject.SetActive (false);
}
void Start () {
if (isLocalPlayer) {
myHealth.gameObject.SetActive (true);
} else {
myHealth.gameObject.SetActive (false);
}

public void TakeDamage(int amount)


{
if (!isServer)
return;

currentHealth -= amount;
if (currentHealth <= 0)
{
currentHealth = maxHealth;

// called on the Server, but invoked on


the Clients
RpcRespawn();
}
}

void OnChangeHealth (int currentHealth )


{
healthBar.sizeDelta = new Vector2(currentHea
lth , healthBar.sizeDelta.y);
}

[ClientRpc]
void RpcRespawn()
{
if (isLocalPlayer)
{
// move back to zero location
Destroy(gameObject);
result.gameObject.SetActive (true);

if (!isLocalPlayer)
{
Destroy(gameObject);
Score.score += 10;
}
}
}

d. Bullet Setup
Untuk setup pada bullet ada beberapa hal yang perlu
ditambahkan pada sprite bullet. Tambahkan komponen yang
ditunjukkan pada gambar dibawah ini.
 Network Identity berfungsi untuk memberikan identitas pada
bullet.

 Network transform berfungsi untuk melakukan sinkronisasi


gerakan bullet.

 Rigidbody 2D berfungsi memberikan gravitasi dan pengaturan


massa.

 Circle Collider 2D berfungsi untuk menambahkan collid pada


area bullet agar bisa terjadi benturan.
Untuk menambahkan demagae pada bullet adapun source
code yang digunakan sebagai berikut.

using UnityEngine;
using System.Collections;

public class Bullet : MonoBehaviour {

void OnCollisionEnter2D(Collision2D collision)


{
var hit = collision.gameObject;
var health = hit.GetComponent<Health>();
if (health != null)
{
health.TakeDamage(10);
}

Destroy(gameObject);
}
}

Source Code ini memiliki fungsi memberikan demage saat


terjadi collide dengan objek player lain.
e. Move and Shoot
Karena game ini bergenre battle arena maka tank
menggunakan movement dan tembakan.

f. Splash Screen
Splash screen adalah bagian yang paling mudah dalam
pembuatan game karena sudah bisa kita edit padagame setting.
g. Main Menu
Main menu atau lobby manager ini bisa didownload pada
unity asset dan kemudian diimport kedalam asset game. Untuk
penggunaannya sangat mudah, hanya tinggal mengakses scane yang
akan kita jalankan dan jangan lupa prefabs player yang akan
dimaikan juga diinputkan.

h. Health Bar and Score


Pada bagian game play terdapat score dan health bar. Ketika
musuh mati akan memberikan score kepada player.

Anda mungkin juga menyukai