• Tidak ada hasil yang ditemukan

BAB IV PEMBUATAN PEMBAHASAN GAME - 13.07.0003 Pieter Santoso Hadi.BAB IV

N/A
N/A
Protected

Academic year: 2019

Membagikan "BAB IV PEMBUATAN PEMBAHASAN GAME - 13.07.0003 Pieter Santoso Hadi.BAB IV"

Copied!
41
0
0

Teks penuh

(1)

BAB IV

PEMBUATAN & PEMBAHASAN GAME

4.1 Pembuatan Konsep Game

Pembuatan game diawali dengan perencanaan konsep dasar game serta

melakukan pencarian referensi dari konsep game serupa di Google Play Store.

Game tersebut dibuat dengan menggunakan platform Android. Referensi game lalu

dikaji sehingga game yang dibuat dapat memiliki ciri khasnya tersendiri dibanding

referensi game pembanding. Adapun referensi game pembanding adalah sebagai

berikut :

a.)

Pemburu Koruptor

Gambar 4.1 Pemburu Koruptor Gameplay

(Sumber : http://www.gadgetgaul.com/wp-content/uploads/2014/09/SS71.jpg )

(2)

diri dari penjara dan konsep melawan musuh ini diambil sebagai referensi dalam

penyusunan konsep game.

b.)

Tap Koruptor

Gambar 4.2 Tap Koruptor Gameplay

(Sumber :

http://img.duniaku.net/wp-content/uploads/2016/09/duniaku-tapkoruptor-2.jpg )

(3)

tokoh koruptor yang buruk tersebut diambil sebagai referensi dalam penyusunan

konsep game.

c.)

Fate Grand Order (FGO)

Gambar 4.3 Fate Grand Order (FGO)

(Sumber :https://assets.rpgsite.net/images/images/000/055/586/original/fgo_axpre

sskit_%2812%29.jpg )

(4)

d.)

TableZombies AR

Gambar 4.4 TableZombies ARGameplay

(Sumber :

https://play.google.com/store/apps/details?id=com.srg.tzcards )

TableZombies

AR

ini memiliki

Gameplay

yang mudah dipahami. Player

hanya perlu menembak setiap

zombie

yang muncul di layar. Desain game dari

TableZombies AR

ini diambil sebagai referensi dalam penyusunan konsep dasar

game.

Setelah membandingkan dan mempelajari game-game referensi, game yang

dibuat tersebut merupakan game edukasi dengan genre

Augmented Reality

. Adapun

pesan yang akan disampaikan kepada pemain adalah tentang hubungan korupsi dan

karakter mahasiswa, pesan untuk tidak menunda-nunda pekerjaan, pesan tidak

memberi contekan, serta pesan untuk tidak bertidak pasif dalam kerja kelompok.

4.2 Pembuatan

Asset

Game

(5)

engine

karena adanya plugin seperti

Vuforia

yang mempermudah pengerjaan

pembuatan serta memiliki kinerja yang stabil untuk game bergenre

Augmented

Reality

.

Pembuatan game dimulai dengan menentukan judul game. Setelah

mempertimbangkan konsep dan tujuan game, judul game tersebut adalah

Mental of

Corrupt

.

Gambar 4.5 Mental of Corrupt

Adapun gambar

icon

dan

button

yang telah dibuat :

Tabel 4.1 Icon, Splash Screen, dan Tombol

Obyek 2D Keterangan

Icon Game

Splash Screen

(6)

Splash Screen

Menu Button

Icon Loading

Back Button

Adapun gambar

bakground

adalah sebagai berikut :

Tabel 4.2 Background

Obyek 2D Keterangan

Pintu Masuk / Lobi

(7)

Ruangan Prof. Julius

Laboratorium

Adapun karakter yang telah dibuat :

Tabel 4.3 Karakter

Obyek 2D Keterangan

(8)

Prof. Julius

Adi

(Pemilik permasalahan menunda pekerjaan)

Beta

(Pemilik permasalahan memberi contekan)

Charlie

(Pemilik permasalahan tidak bekerja dalam

(9)

Researcher

(Asisten Prof. Julius)

Adapun

asset

3D yang digunakan adalah sebagai berikut[21][22][23]:

Tabel 4.4 Aset Obyek 3D

Obyek 3D Keterangan

Perwujudan kebiasaan buruk : menunda-nunda pekerjaan

(10)

Perwujudan kebiasaan buruk : tidak bekerja dalam kerja

kelompok

Assets

tersebut lalu dikumpulkan dalam satu folder

Assets

yang terdapat di

folder

project Unity

.

Gambar 4.6 Assets Folder

4.3 Pembuatan Game

4.3.1 Pembuatan Menu Utama

(11)

Scene

berisi ucapan terima kasih kepada pihak-pihak yang telah membantu serta

ikut dalam pembuatan game.

Button Exit

berguna untuk menutup aplikasi game.

Pembuatan game menggunakan

Unity Engine

5.6.1f1. Menu utama dibuat

pada

scene

dengan nama

CS

.

Pada

scene

CS

kolom

Hierarchy

, obyek

Canvas

dibuat

dan di dalam

Canvas

tersebut berisi

Button, Text,

dan

Image

.

Button, Text,

dan

Image

tersebut lalu diposisikan sesuai dengan kebutuhan dan tujuan.

Gambar 4.7 Menu Utama Hierarchy

Adapun

script

yang digunakan adalah sebagai berikut :

// Use this for initialization void Start () {

}

// Update is called once per frame void Update () {

(12)

public void taptap() { title.SetBool("hidden2", true); tap.SetActive(false); start.SetActive(true); credit.SetActive(true); exit.SetActive(true); }

public void OpenSettings() {

startButton.SetBool("hidden", false); creditButton.SetBool("hidden", false); exitButton.SetBool("hidden", false); title.SetBool("hidden", true);

if (startButton.GetCurrentAnimatorStateInfo(0).normalizedTime >= 1 && !startButt on.IsInTransition(0)){ Story_chapter.SetActive(true); prologue.SetActive(true); chone.SetActive(true); chtwo.SetActive(true); chthree.SetActive(true); }

if (title.GetCurrentAnimatorStateInfo(0).normalizedTime > 1 && !title.IsInTransitio n(0)){

back.SetActive(true); }

}

public void backButton() { title.SetBool("hidden", false); startButton.SetBool("hidden", true); creditButton.SetBool("hidden", true); exitButton.SetBool("hidden", true); Story_chapter.SetActive(false); prologue.SetActive(false); chone.SetActive(false); chtwo.SetActive(false); chthree.SetActive(false); back.SetActive(false); title.SetBool("hidden2", true); tap.SetActive(false); start.SetActive(true); credit.SetActive(true); exit.SetActive(true); }

public void loadzero() {

(13)

}

public void loadlvone() {

SceneManager.LoadScene(7); }

public void loadlvtwo() {

SceneManager.LoadScene(11); }

public void loadlvthree() {

SceneManager.LoadScene(15); }

public void loadcredit() {

SceneManager.LoadScene(17); }

public void excit() { Application.Quit(); }

}

Gambar 4.8 Listing Program MainMenu

(14)

Gambar 4.9 Tampilan Menu Utama

(15)

Gambar 4.11 Tampilan Menu Utama Button Credit

4.3.2 Pembuatan

Level

:

Prologue

Pembuatan

Level : Prologue

terbagi menjadi 2

scene

.

Scene

pertama

berfungsi untuk menyampaikan pesan melawan kebiasaan buruk mahasiswa dalam

pendidikan anti korupsi.

Scene

pertama memiliki genre visual novel.

Scene

kedua

merupakan

Augmented Reality

melawan musuh yaitu perwujudan kebiasaan

menunda pekerjaan.

(16)

Adapun

Script prologue.cs

yang digunakan pada

scene

pertama adalah

sebagai berikut:

// Use this for initialization void Start () {

}

// Update is called once per frame void Update () {

switch (a) { case 1 :

dialogue.text ="Jadi ini... "; fscreen.SetActive(false); break;

case 2 :

mc01.SetActive(false); professora1.SetActive(true); ...

}

public void textchange() {

if(a!=5 && a!=8 && a!=10 && a!=19 && a!=25 && a!=54 && a!=37) { a=a+1;

} else {a=a+2;} }

public void btnchoice1() { a=a+1;

}

public void btnchoice2() { a=a+2;

} }

Gambar 4.13 Listing Program Prologue

(17)

Gambar 4.14 Scene #2 Game Augmented Reality

Pada

Scene

kedua, hal pertama yang perlu dilakukan adalah mengimpor

Vuforia Package.

Pilih

Assets -> import package -> custom package,

lalu pilih

Vuforia Package

yang telah diunduh. Hapus obyek

Camera

pada kolom

Hierarchy,

lalu pada kolom

project -> Assets -> Vuforia -> Prefabs -> ARCamera. Drag

ARCamera

kekolom

Hierarchy

.

Pada obyek

ARCamera

, lihatlah kolom

Inspector

dan masukan

Vuforia

Licence Key. Vuforia Licence Key

dapat

ditemukan saat membuat

project

di

(18)

Gambar 4.15 Pengaturan Vuforia ARCamera

Obyek

ARCamera

harus memiliki

Position x, y, z

bernilai

0 sebab posisi 0

itu berarti terletak tepat dikamera

Smart Phone.

Pada kolom

Hierarchy

dibuat

obyek 3D

Cube

. Adapun kode programan menggunakan bahasa

C#

(

SpawnScript.cs

) yang berguna untuk melakukan

Spawn Cube

atau membuat

Cube

bermunculan dalam waktu berkala dan batas tertentu

:

// Use this for initialization void Start () {

// Initializing spawning loop StartCoroutine( SpawnLoop() );

// Initialize Cubes array according to // the desired quantity

mCubes = new GameObject[ mTotalCubes ]; }

// Update is called once per frame void Update () {

}

(19)

private bool SetPosition() { // get the camera position

Transform cam = Camera.main.transform;

// set the position 10 units forward from the camera position transform.position = cam.forward * 10;

return true; }

// We'll use a Coroutine to give a little // delay before setting the position private IEnumerator ChangePosition() {

yield return new WaitForSeconds(0.2f); // Define the Spawn position only once if ( !mPositionSet ){

// change the position only if Vuforia is active if ( VuforiaBehaviour.Instance.enabled ) SetPosition();

} }

// Loop Spawning cube elements private IEnumerator SpawnLoop() {

// Defining the Spawning Position StartCoroutine( ChangePosition() );

yield return new WaitForSeconds(0.2f);

// Spawning the elements int i = 0;

while ( i <= (mTotalCubes-1) ) {

mCubes[i] = SpawnElement(); i++;

yield return new WaitForSeconds(Random.Range(mTimeToSpawn, mTimeToSpawn*3)); }

}

// Spawn a cube

private GameObject SpawnElement() {

// spawn the element on a random position, inside a imaginary sphere

GameObject cube = Instantiate(mCubeObj, (Random.insideUnitSphere*4) + transform.positi on, transform.rotation ) as GameObject;

// define a random scale for the cube float scale = Random.Range(0.5f, 1f); // change the cube scale

cube.transform.localScale = new Vector3( scale, scale, scale ); return cube;

} }

(20)

Buat folder baru dengan nama

Prefabs

.

Drag

obyek

Cube

kefolder

Prefabs

dan

drag

obyek

Cube

yang ada pada folder

Prefabs

ke

M Cube Obj

pada kolom

Inspector.

Gambar 4.17 Cube Pada Folder Prefabs

Gambar 4.18 Drag Cube ke M Cube Obj

Buat kode program dengan bahasa

C#

dan beri nama

CubeBehaviorScript

.

CubeBehaviorScript

ini berguna untuk menentukan

HP

(

Health Point

) dari obyek

Cube

serta ukuran dan pergerakan

Cube

. Adapun script

CubeBehaviorScript

adalah

sebagai berikut :

// Use this for initialization void Start () {

CubeSettings(); }

// Update is called once per frame void Update () {

(21)

if ( !mIsCubeScaled ) ScaleObj(); }

// Set initial cube settings private void CubeSettings(){

// defining the anchor point as the main camera mOrbitAnchor = Camera.main.transform;

// defining the orbit direction float x = Random.Range(-2f,2f); float y = Random.Range(-2f,2f); float z = Random.Range(-2f,2f);

mOrbitDirection = new Vector3( x, y , z );

// defining speed

mOrbitSpeed = Random.Range( 1f, mOrbitMaxSpeed );

// defining scale

float scale = Random.Range(mScaleMin, mScaleMax); mCubeMaxScale = new Vector3( scale, scale, scale );

// set cube scale to 0, to grow it lates transform.localScale = Vector3.zero;

// cube colour

GetComponent<Renderer>().material.color = new Color(255, 10, 10); }

// Makes the cube rotate around a anchor point // and rotate around its own axis

private void RotateCube(){ // rotate cube around camera transform.RotateAround(

mOrbitAnchor.position, mOrbitDirection, mOrbitSpeed * Time.deltaTime);

// rotating around its axis

transform.Rotate( mOrbitDirection * 30 * Time.deltaTime); }

// Scale object from 0 to 1 private void ScaleObj(){

// growing obj

if ( transform.localScale != mCubeMaxScale )

transform.localScale = Vector3.Lerp( transform.localScale, mCubeMaxScale, Time.deltaTi me * mGrowingSpeed );

else

mIsCubeScaled = true; }

// Cube got Hit

// return 'false' when cube was destroyed public bool Hit( int hitDamage ){ mCubeHealth -= hitDamage;

(22)

}

return false; }

// Destroy Cube

private IEnumerator DestroyCube(){ mIsAlive = false;

// Make the cube desappear

GetComponent<Renderer>().enabled = false;

// we'll wait some time before destroying the element // this is usefull when using some kind of effect // like a explosion sound effect.

// in that case we could use the sound lenght as waiting time yield return new WaitForSeconds(1f);

Destroy(gameObject);

} }

Gambar 4.19

Listing Program CubeBehaviorScript

Pada kolom

Hierarchy

dibuat

empty object

dengan nama

_PlayerController

dan satu buah

empty object

lagi didalamnya dengan nama

_LaserController

. Buat

C# Script

dengan nama

LaserScript.cs

dan

drag C# script

tersebut keobyek

_LaserController

. Adapun kode program

LaserScript.cs

adalah sebagai berikut :

// Use this for initialization void Start () {

// getting the Line Renderer

mLaserLine = GetComponent<LineRenderer>();

}

// Update is called once per frame void Update () {

if ( Input.GetButton("Fire1") && Time.time > mNextFire ){ Fire();

}

}

// Shot the Laser private void Fire(){

// Get ARCamera Transform

Transform cam = Camera.main.transform;

// Define the time of the next fire mNextFire = Time.time + mFireRate;

(23)

Vector3 rayOrigin = cam.position;

// Set the origin position of the Laser Line

// It will always 10 units down from the ARCamera // We adopted this logic for simplicity

mLaserLine.SetPosition(0, transform.up * -10f );

// Hold the Hit information RaycastHit hit;

// Checks if the RayCast hit something

if ( Physics.Raycast( rayOrigin, cam.forward, out hit, mFireRange )){

// Set the end of the Laser Line to the object hit mLaserLine.SetPosition(1, hit.point );

boom.SetActive(true); a=a+1;

} else {

// Set the enfo of the laser line to be forward the camera // using the Laser range

mLaserLine.SetPosition(1, cam.forward * mFireRange );

}

// anterior code supressed for simplicity

// Show the Laser using a Coroutine StartCoroutine(LaserFx());

// Checks if the RayCast hit something

if ( Physics.Raycast( rayOrigin, cam.forward, out hit, mFireRange )){

// Set the end of the Laser Line to the object hitted mLaserLine.SetPosition(1, hit.point );

// Get the CubeBehavior script to apply damage to target

CubeBehaviorScript cubeCtr = hit.collider.GetComponent<CubeBehaviorScript>(); if ( cubeCtr != null ) {

if ( hit.rigidbody != null ) { // apply force to the target

hit.rigidbody.AddForce(-hit.normal*mHitForce); // apply damage the target

cubeCtr.Hit( mLaserDamage ); }

}

// Get the CubeBehavior script to apply damage to target pig pigCtr = hit.collider.GetComponent<pig>(); if ( pigCtr != null ) {

if ( hit.rigidbody != null ) { // apply force to the target

hit.rigidbody.AddForce(-hit.normal*mHitForce); // apply damage the target

pigCtr.Hit( mLaserDamage ); }

(24)

}

}

}

// Show the Laser Effects private IEnumerator LaserFx(){ mLaserLine.enabled = true;

if(a==4) {

CanvasTutorial2.SetActive(true); a=5;

}

// Way for a specific time to remove the LineRenderer yield return mLaserDuration;

mLaserLine.enabled = false;

yield return new WaitForSeconds(2.0f); boom.SetActive(false);

} }

Gambar 4.20 Listing Program LaserScript

Pada lingkaran 1 dijelaskan bahwa ketika obyek

_LaserController

bersentuhan dengan obyek

pig

maka

HP

dari obyek

pig

akan berkurang. Pada folder

asset 3D

Pigman

yang telah diunduh,

drag PigmanAnimated

ke kolom

Hierarchy

.

Setelahnya dibuat kode program

C#

dengan nama

pig

. Adapun kode program

pig.cs

adalah sebagai berikut :

void Start () { CubeSettings();

orc.SetBool("normal", false); orc.SetBool("attacks", true); }

// Update is called once per frame void Update () {

//tes

if (transform.position.x >= -5 && aone==true) {

transform.Translate(Vector3.right * movementSpeed * Time.deltaTime); atwo=true;

} else if (transform.position.x <= 5 && atwo==true) {

transform.Translate(Vector3.left * movementSpeed * Time.deltaTime); aone=false;

} else if (transform.position.x >= 5) {

(25)

}

if (transform.position.x <= 5 && transform.position.x >= 2) { hpbar.SetActive(false);

if(red==true){

myCG.SetActive(true);

} else if (red==false) {myCG.SetActive(false);} }

if (transform.position.x >= 3) { red=false;

} }

private void CubeSettings(){ // get the camera position

Transform cam = Camera.main.transform;

// set the position 10 units forward from the camera position transform.position = cam.forward * 11;

}

// Cube got Hit

// return 'false' when cube was destroyed public bool Hit( int hitDamage ){ mCubeHealth -= hitDamage;

ebar.transform.localScale -= new Vector3(1,0,0);

//orc.SetBool("attacks", true);

if ( mCubeHealth <= 0 && mIsAlive ) { ebar.SetActive(false); orc.SetBool("death", true); canvas4.SetActive(true); StartCoroutine(DestroyCube()); return true; } return false; }

private IEnumerator DestroyCube(){ mIsAlive = false;

// Make the cube desappear

yield return new WaitForSeconds(2.0f);

}

}

Gambar 4.21

Listing Program Pig
(26)

kebiasaan menunda pekerjaan memiliki

HP

dan pola serangan yang perlu

diwaspadai pemain. Pemain berhasil menyelesaikan game ketika pemain dapat

menghacurkan musuh dengan membuat

HP

-barnya menjadi nol.

4.3.3 Pembuatan

Level : Chapter 1

Pembuatan

Level : Chapter 1

terbagi menjadi 2

scene

.

Scene

pertama

berfungsi untuk menyampaikan pesan melawan kebiasaan buruk mahasiswa dalam

pendidikan anti korupsi.

Scene

pertama memiliki genre visual novel.

Scene

kedua

merupakan

Augmented Reality

melawan musuh yaitu perwujudan memberi

contekan.

Gambar 4.22 Scene #1 Penyampaian Pesan

Adapun

Script lvone.cs

yang digunakan pada

scene

pertama adalah sebagai

berikut :

// Use this for initialization void Start () {

}

// Update is called once per frame void Update () {

switch (a) { case 1 :

name.text = "+ Prof. Julius +";

dialogue.text ="Iyaaah, kau benar-benar menolong kami. "; fscreen.SetActive(false);

break; case 2 :

(27)

break; case 3 :

choice1Btn.SetActive(true); choice2Btn.SetActive(true); ...

}

public void btnchoice1() { a=a+1;

}

public void btnchoice2() { a=a+1;

}

public void textchange() { a=a+1;

} }

Gambar 4.23 Listing Program Lvone

Tanpa memiliki perbedaan yang

significant

dengan

script prologue.cs

,

fungsi

Update()

berguna untuk mengganti

Image

karakter serta

Text

seiring

perkembangan cerita yang menyampaikan pesan. Fungsi

textchange()

berguna

untuk menambah variabel

int a

yang berhubungan dengan fungsi

Update().

Fungsi

btnchoice1()

berguna untuk menamah variabel

int a

ketika pemain memilih

jawaban. Fungsi

btnchoice2()

memiliki guna yang sama dengan Fungsi

btnchoice1(). Int a

sendiri berguna untuk mengganti perintah

swicth-case

sesuai

dengan perubahan

int a

.

(28)

Oleh karena

Unity

telah mengimport

Vuforia package

pada pembuatan

Level : Prologue

maka tidak perlu dilakukan

import

untuk kedua kalinya.

Pembuatan

SpawnScript.cs

dan

CubeBehaviorScript.cs

juga telah dilakukan

sebelumnya sehingga tidak perlu membuat kode pemrogamannya lagi dan dapat

langsung diaplikasikan pada pembuatan

Level : Chapter 1

ini. Akan tetapi perlu

dilakukan perubahan terhadap

Laserscript.cs

karena adanya

bug

yang ditakutkan

dapat menganggu kinerja game. Adapun kode program

Laserscript2.cs

adalah

sebagai berikut :

// Use this for initialization void Start () {

// getting the Line Renderer

mLaserLine = GetComponent<LineRenderer>();

}

// Update is called once per frame void Update () {

if ( Input.GetButton("Fire1") && Time.time > mNextFire ){ Fire();

}

}

// Shot the Laser private void Fire(){

// Get ARCamera Transform

Transform cam = Camera.main.transform;

// Define the time of the next fire mNextFire = Time.time + mFireRate;

// Set the origin of the RayCast Vector3 rayOrigin = cam.position;

// Set the origin position of the Laser Line

// It will always 10 units down from the ARCamera // We adopted this logic for simplicity

mLaserLine.SetPosition(0, transform.up * -10f );

// Hold the Hit information RaycastHit hit;

// Checks if the RayCast hit something

if ( Physics.Raycast( rayOrigin, cam.forward, out hit, mFireRange )){

// Set the end of the Laser Line to the object hit mLaserLine.SetPosition(1, hit.point );

boom.SetActive(true);

} else {

(29)

// using the Laser range

mLaserLine.SetPosition(1, cam.forward * mFireRange );

}

// Show the Laser using a Coroutine StartCoroutine(LaserFx());

// Checks if the RayCast hit something

if ( Physics.Raycast( rayOrigin, cam.forward, out hit, mFireRange )){

// Set the end of the Laser Line to the object hitted mLaserLine.SetPosition(1, hit.point );

// Get the CubeBehavior script to apply damage to target

CubeBehaviorScript cubeCtr = hit.collider.GetComponent<CubeBehaviorScript>(); if ( cubeCtr != null ) {

if ( hit.rigidbody != null ) { // apply force to the target

hit.rigidbody.AddForce(-hit.normal*mHitForce); // apply damage the target

cubeCtr.Hit( mLaserDamage ); }

}

//get the sphere shield damage

shield shieldCtr = hit.collider.GetComponent<shield>(); if ( shieldCtr != null ) {

if ( hit.rigidbody != null ) { // apply force to the target

hit.rigidbody.AddForce(-hit.normal*mHitForce); // apply damage the target

shieldCtr.Hit( mLaserDamage ); }

}

//get the knight damage

knight knightCtr = hit.collider.GetComponent<knight>(); if ( knightCtr != null ) {

if ( hit.rigidbody != null ) { // apply force to the target

hit.rigidbody.AddForce(-hit.normal*mHitForce); // apply damage the target

knightCtr.Hit( mLaserDamage ); }

} } } }

// Show the Laser Effects private IEnumerator LaserFx(){ mLaserLine.enabled = true;

// Way for a specific time to remove the LineRenderer yield return mLaserDuration;

mLaserLine.enabled = false;

yield return new WaitForSeconds(2.0f);

1

(30)

boom.SetActive(false); }

}

Gambar 4.25 Listing Program LaserScript2

Perbedaan

Laserscript2.cs

dengan

Laserscript.cs

terlihat pada lingkaran1

dan lingkaran2 yaitu saat laser bersentuhan dengan obyek

knight

dan

shield

. Pada

folder

asset

3D

ToonRTS_demo_Knight

yang

telah

diunduh,

drag

ToonRTS_demo_Knight

ke kolom

Hierarchy

. Setelahnya dibuat kode program

C#

dengan nama

knight.cs

. Adapun kode program

knight

adalah sebagai berikut:

// Use this for initialization void Start () {

CubeSettings();

}

// Update is called once per frame void Update () {

if (transform.position.x <= 4 && aone==true) {

transform.Translate(Vector3.left * movementSpeed * Time.deltaTime); transform.Translate(Vector3.down * movementSpeed * Time.deltaTime); atwo=true;

}

else if (transform.position.x >= -3 && atwo==true ) {

transform.Translate(Vector3.right * movementSpeed * Time.deltaTime); aone=false;

}

else if (transform.position.x >= -4 && transform.position.y <= 2) { transform.Translate(Vector3.left * movementSpeed * Time.deltaTime); transform.Translate(Vector3.up * movementSpeed * Time.deltaTime); atwo=false;

} else if (transform.position.x >= -4 && transform.position.y >= 2) { transform.Translate(Vector3.right * movementSpeed * Time.deltaTime); aone=true;

}

if (transform.position.x >= 5) { atwo=true;

} }

private void CubeSettings(){

// defining the anchor point as the main camera //mOrbitAnchor = Camera.main.transform; // get the camera position

(31)

// set the position 10 units forward from the camera position transform.position = cam.forward * 11;

}

// Cube got Hit

// return 'false' when cube was destroyed public bool Hit( int hitDamage ){ mCubeHealth -= hitDamage;

ebar.transform.localScale -= new Vector3(1,0,0);

//orc.SetBool("attacks", true);

if ( mCubeHealth <= 0 && mIsAlive ) { ebar.SetActive(false);

//orc.SetBool("death", true); canvas4.SetActive(true); StartCoroutine(DestroyCube()); return true;

}

return false; }

// Destroy Cube

private IEnumerator DestroyCube(){ mIsAlive = false;

// Make the cube desappear yield return new WaitForSeconds(1.0f); Destroy(gameObject);

} }

Gambar 4.26 Listing Program Knight

Kode program

knight.cs

tersebut berguna untuk mengatur gerakan obyek

3D

ToonRTS_demo_Knight

,

HP

, dan pola serangan. Pemain harus menembak

musuh dengan memposisikan musuh tepat di tengah layar. Musuh yang merupakan

perwujudan memberi contekan memiliki

HP

dan pola serangan yang perlu

diwaspadai pemain. Pemain berhasil menyelesaikan game ketika pemain dapat

menghacurkan musuh dengan membuat

HP

-barnya menjadi nol.

4.3.4 Pembuatan

Level : Chapter 2

(32)

Gambar 4.27 Scene #1 Penyampaian Pesan

Adapun

Script lvtwo.cs

yang digunakan pada

scene

pertama adalah sebagai

berikut :

// Use this for initialization void Start () {

}

// Update is called once per frame void Update () {

switch (a) { case 1 :

name.text = "+ Prof. Julius +";

dialogue.text ="Untung pada akhirnya kita bisa memotivasi Beta. Haha..."; fscreen.SetActive(false);

break; case 2 :

dialogue.text="Sepertinya, kita berdua bisa menjadi tim yang hebat."; break;

case 3 :

choice1Btn.SetActive(true); choice2Btn.SetActive(true); dialgueBtn.SetActive(false); ...

}

public void btnchoice1() { a=a+1;

}

(33)

a=a+1; }

public void textchange() { a=a+1;

} }

Gambar 4.28 Listing Program Lvtwo

Gambar 4.29 Scene #2 Game Augmented Reality

Oleh karena

Unity

telah mengimpor

Vuforia package

pada pembuatan

Level:

Prologue

maka tidak perlu dilakukan

import

untuk kedua kalinya.

Pembuatan

SpawnScript.cs

dan

CubeBehaviorScript.cs

juga telah dilakukan

sebelumnya sehingga tidak perlu membuat kode pemrogamannya lagi dan dapat

langsung diaplikasikan pada pembuatan

Level: Chapter 2

ini. Adapun kode

program

Laserscript3.cs

adalah sebagai berikut:

void Start () {

// getting the Line Renderer

mLaserLine = GetComponent<LineRenderer>();

}

// Update is called once per frame void Update () {

if ( Input.GetButton("Fire1") && Time.time > mNextFire ){ Fire();

}

(34)

// Shot the Laser private void Fire(){

// Get ARCamera Transform

Transform cam = Camera.main.transform;

// Define the time of the next fire mNextFire = Time.time + mFireRate;

// Set the origin of the RayCast Vector3 rayOrigin = cam.position;

// Set the origin position of the Laser Line

// It will always 10 units down from the ARCamera // We adopted this logic for simplicity

mLaserLine.SetPosition(0, transform.up * -10f );

// Hold the Hit information RaycastHit hit;

// Checks if the RayCast hit something

if ( Physics.Raycast( rayOrigin, cam.forward, out hit, mFireRange )){

// Set the end of the Laser Line to the object hit mLaserLine.SetPosition(1, hit.point );

boom.SetActive(true);

} else {

// Set the enfo of the laser line to be forward the camera // using the Laser range

mLaserLine.SetPosition(1, cam.forward * mFireRange );

}

// anterior code supressed for simplicity

// Show the Laser using a Coroutine StartCoroutine(LaserFx());

// Checks if the RayCast hit something

if ( Physics.Raycast( rayOrigin, cam.forward, out hit, mFireRange )){

// Set the end of the Laser Line to the object hitted mLaserLine.SetPosition(1, hit.point );

// Get the CubeBehavior script to apply damage to target

CubeBehaviorScript cubeCtr = hit.collider.GetComponent<CubeBehaviorScript>(); if ( cubeCtr != null ) {

if ( hit.rigidbody != null ) { // apply force to the target

hit.rigidbody.AddForce(-hit.normal*mHitForce); // apply damage the target

cubeCtr.Hit( mLaserDamage ); }

}

(35)

rhino1 rhino1Ctr = hit.collider.GetComponent<rhino1>(); if ( rhino1Ctr != null ) {

if ( hit.rigidbody != null ) { // apply force to the target

hit.rigidbody.AddForce(-hit.normal*mHitForce); // apply damage the target

rhino1Ctr.Hit( mLaserDamage ); }

} }

}

// Show the Laser Effects private IEnumerator LaserFx(){ mLaserLine.enabled = true;

// Way for a specific time to remove the LineRenderer yield return mLaserDuration;

mLaserLine.enabled = false;

yield return new WaitForSeconds(2.0f); boom.SetActive(false);

}

}

Gambar 4.30 Listing Program LaserScript3

Pada lingkaran3 terlihat perbedaan antara kode program

Laserscript.cs

dan

Laserscript2.cs

yang telah dibuat sebelumnya. Pada folder

asset 3D Rhino

yang

telah diunduh,

drag Rhino

ke kolom

Hierarchy

. Setelahnya dibuat kode program

C#

dengan nama

rhino

. Adapun kode program

rhino.cs

adalah sebagai berikut:

void Start () { CubeSettings();

orc.SetBool("attacks", true); }

// Update is called once per frame void Update () {

if (transform.position.x >= -7 && aone==true) {

transform.Translate(Vector3.right * movementSpeed * Time.deltaTime); atwo=true;

} else if (transform.position.x <= 7 && atwo==true) {

transform.Translate(Vector3.left * movementSpeed * Time.deltaTime); aone=false;

} else if (transform.position.x >= 7) {

transform.Translate(Vector3.right * movementSpeed * Time.deltaTime); aone=true;

}

(36)

//attack

if (transform.position.x <= 5 && transform.position.x >= 2) { hpbar.SetActive(false);

if(red==true){

myCG.SetActive(true);

} else if (red==false) {myCG.SetActive(false);} }

if (transform.position.x >= 3) { red=false;

}

}

private void CubeSettings(){

Transform cam = Camera.main.transform;

transform.position = cam.forward * 11;

}

public bool Hit( int hitDamage ){ mCubeHealth -= hitDamage; if(mCubeHealth>=700) {

ebar2.transform.localScale -= new Vector3(1,0,0);

}

else if (mCubeHealth<700) {

ebar.transform.localScale -= new Vector3(1,0,0);

}

//orc.SetBool("attacks", true);

if ( mCubeHealth <= 0 && mIsAlive ) { ebar.SetActive(false); canvas4.SetActive(true); StartCoroutine(DestroyCube()); return true; } return false; }

private IEnumerator DestroyCube(){ mIsAlive = false;

yield return new WaitForSeconds(1.0f); Destroy(gameObject);

}

}

Gambar 4.31 Listing Program Rhino

(37)

memposisikan musuh tepat di tengah layar. Musuh yang merupakan perwujudan

tidak bekerja dalam kerja kelompok memiliki

HP

dan pola serangan yang perlu

diwaspadai pemain. Pemain berhasil menyelesaikan game ketika pemain dapat

menghacurkan musuh dengan membuat

HP

-barnya menjadi nol.

4.3.5 Pembuatan

Level :

Epilogue

Level : Epilogue

merupakan kesimpulan dari

Level : Prologue , Level :

Chapter 1 , Level : Chapter 2. Level : Epilogue

ini disajikan dalam bentuk

visual

novel

dan pada akhirnya diberikan

credit roll

yang berisi ucapan terima kasih

kepada pihak-pihak yang telah membantu pembuatan game.

Gambar 4.32 Level : Epilogue

Adapun

Script epilogue.cs

yang digunakan adalah sebagai berikut :

// Use this for initialization void Start () {

}

// Update is called once per frame void Update () {

switch (a) { case 1 :

name.text = "+ Prof. Julius +";

(38)

nmu ?";

fscreen.SetActive(false); break;

case 2 :

choice1Btn.SetActive(true); choice2Btn.SetActive(true); dialgueBtn.SetActive(false); professora1.SetActive(false); mc01.SetActive(true); name.text= "+ Player +";

chtext1.text = "Ya, aku mendapatkan semua informasi yang kubutuhkan."; chtext2.text = "Ya, bahkan aku bekerja langsung didalamnya.";

break; case 3 :

//scrollview.SetActive(false); mc01.SetActive(false); choice1Btn.SetActive(false); choice2Btn.SetActive(false); ...

}

public void btnchoice1() { a=a+1;

}

public void btnchoice2() { a=a+1;

}

public void textchange() { a=a+1;

} }

(39)

4.4 Pembahasan Statistik

Setelah game selesai dibuat, hipotesa dibangun untuk memprediksi apakah

game

Mental of Corrupt

mampu menyampaikan pesan anti korupsi. Berikut ini

hipotesa yang dibangun:

H1:

Game

Mental of Corrupt

mampu menyampaikan pesan pendidikan korupsi ke

mahasiswa.

H2:

Game

Mental of Corrupt

mampu menyampaikan pesan melawan sikap

menunda pekerjaan yang berkaitan dengan pendidikan korupsi.

H3:

Game

Mental of Corrupt

mampu menyampaikan pesan melawan sikap

memberi contekan yang berkaitan dengan pendidikan korupsi.

H4:

Game

Mental of Corrupt

mampu menyampaikan pesan melawan sikap tidak

bekerja dalam kerja kelompok yang berkaitan dengan pendidikan korupsi.

H5:

Game

Mental of Corrupt

mampu menyampaikan pesan melawan kebiasaan

buruk dikalangan mahasiswa berkaitan dengan pendidikan korupsi.

Hipotesa yang diajukan perlu diuji dengan menggunakan metode survei

dengan menyebarkan kuesioner. Adapun pertayaan yang dibangun dalam kuesioner

disusun berdasar hipotesa yang diajukan untuk mengetahui apakah game

Mental of

Corrupt

mampu menyampaikan pesan anti korupsi. Berikut ini pertanyaan yang

dibangun berdasarkan hipotesa:

Q1)

Setelah memainkan game

Mental of Corrupt

, berapa nilai yang anda berikan

untuk pesan hubungan korupsi dan karakter mahasiswa?

Q2)

Setelah memainkan game

Mental of Corrupt

, berapa nilai yang anda berikan

untuk pesan tidak menunda-nunda pekerjaan

?

Q3)

Setelah memainkan game

Mental of Corrupt

, berapa nilai yang anda berikan

untuk pesan tidak memberi contekan

?

(40)

Q5)

Setelah memainkan game

Mental of Corrupt

, berikanlah nilai untuk game

pendidikan anti korupsi ber genre

Augmented Reality

(AR) tersebut dalam

menyampaikan pesan?

Hipotesa H5 dibatalkan dengan alasan bahwa pertanyaan kelima (Q5) yang

merupakan alat tes untuk hipotesa H5 tidak secara tepat mewakili pengukuran

melawan kebiasaan buruk.

Data hasil kuesioner tersebut lalu diolah menggunakan SPSS. Penghitungan

dilakukan dengan uji

One-Sample T Test

untuk membuktikan hipotesa yang

diajukan terpenuhi dan korelasi

Pearson

untuk membuktikan bahwa variabel

independent

Q2, Q3, dan Q4 berkorelasi dengan variabel

dependent

Q1.

Berikut adalah hasil uji

One- Sample T Test :

Tabel 4.5 One- Sample Statistics

One-Sample Statistics

N Mean Std. Deviation Std. Error Mean

Q1 30 3,9333 ,78492 ,14331

Q2 30 4,1000 ,88474 ,16153

Q3 30 4,1333 ,81931 ,14958

Q4 30 4,3000 ,70221 ,12821

Tabel 4.6 One- Sample Test

One-Sample Test

Test Value = 3

t df Sig. (2-tailed) Mean Difference

Q1 6,513 29 ,000 ,93333

Q2 6,810 29 ,000 1,10000

Q3 7,577 29 ,000 1,13333

Q4 10,140 29 ,000 1,30000

(41)

3 menghasilkan angka positif. Dengan demikian, hipotesa H1, H2, H3, dan H4

terbukti (

supported).

Untuk menunjukan kaitan/korelasi antara variabel

independent

Q2, Q3, Q4

dengan variabel

dependent

Q1 digubakan uji korelasi

Pearson

yang hasilnya

ditunjukan dalam tabel 4.7.

Tabel 4.7 Hasil Korelasi Menggunakan SPSS

Gambar

Gambar 4.1 Pemburu Koruptor Gameplay
Gambar 4.2 Tap Koruptor Gameplay
Gambar 4.3 Fate Grand Order (FGO)
Gambar 4.4 TableZombies AR Gameplay
+7

Referensi

Dokumen terkait