Anda di halaman 1dari 18

Modul 7

Pengenalan Scripting (Medium)

Kalian sudah mengetahui dasar-dasar dalam coding di C#, selanjutnya masuk


lebih dalam scripting bagian medium. Kali ini kita akan membahas bagaimana
cara kita mengakses object di Unity dan component - component-nya dan
pengenalan collision dan trigger.

A. Akses GameObject dalam Script


Ada macam-macam cara untuk mengakses game object melalui script.
Pertama buatlah script dengan nama “RockScript”. Script ini akan
digunakan untuk object Rock.
Cara pertama adalah membuat GameObject.Find.
1. Buka script kalian di Visual Studio. Dan editlah menjadi seperti ini.

using UnityEngine;

public class RockScript : MonoBehaviour


{
// Start is called before the first frame update
void Start()
{
GameObject.Find("Rock").transform.position = new
Vector3(1,1,1);
}
}

2. Save scriptnya dan selanjutnya kembali ke Unity. Drag and Drop


RockScript ke object Scripts. Sehingga muncul RockScript di Inspector.
3. Selanjutnya Play dan lihat perubahannya.
Sebelum diPlay

Sesudah diPlay
Penjelasan Kode

GameObject.Find("Rock").transform.position = new
Vector3(1,1,1);

GameObject.Find("Rock") digunakan untuk mencari Objek yang


bernama Rock di Hirarki.
Selanjutnya adalah GameObject memiliki component yang bernama
Transform (bisa kalian lihat di Inspector). Itu menjelaskan .transform .
Dan transform memiliki 3 komponen lagi yaitu position, rotation, dan
scale. Dan yang diambil di script adalah .position.
Selanjutnya adalah new Vector3(1,1,1), position mengekspektasi
sebuah Vector3D agar valid. Maka dari itu Vector3 digunakan dan di
dalamnya adalah value dari x, y, dan z.
Cara kedua adalah membuat public GameObject. Ikuti langkah-langkah di
bawah.
1. Edit script kalian menjadi seperti di bawah ini.
using UnityEngine;

public class RockScript : MonoBehaviour


{
public GameObject rockObject; // Make a public
variable

// Start is called before the first frame update


void Start()
{
rockObject.transform.position = new
Vector3(1,1,1);
}
}
2. Selanjutnya jangan lupa save scriptnya. Dan lihat pada Inspector dari
object Scripts. RockScript membutuhkan rockObject. Maka dari itu, drag
and drop object Rock ke Inspector. Hasilnya akan seperti ini.

3. Silakan tekan tombol Play. Hasilnya akan tetap sama yang tadi cuma
beda cara scripting.
Penjelasan Kode

public GameObject rockObject;


Kode di atas membuat sebuah GameObject yang bersifat public agar
rockObject yang dibuat kelihatan di Inspector sehingga bisa diset
melalui Unity.
Cara ketiga adalah cara yang paling efisien menurut saya, yaitu dengan
membuat RockScript menjadi Component dari Object Rock itu sendiri.
Ikuti langkah-langkah di bawah agar mengerti.
1. Pertama, kalian bisa Remove Component RockScript dari Object Scripts.
Caranya adalah klik kanan pada Inspector di RockScript > Remove
Component.

2. Selanjutnya drag and drop RockScript ke Object Rock. Sehingga Object


Rock mempunyai component RockScript. Atau bisa juga dengan cara
lain yaitu dengan melihat Rock di Inspector > Add Component >
RockScript.

3. Selanjutnya edit RockScript menjadi seperti di bawah ini.

using UnityEngine;

public class RockScript : MonoBehaviour


{
// Start is called before the first frame update
void Start()
{
transform.position = new Vector3(1,1,1);
}
}
4. Jangan lupa save scriptnya. Silakan tekan tombol play pada Unity.
Hasilnya akan tetap sama tetapi berbeda cara scripting.
Penjelasan Kode

transform.position = new Vector3(1,1,1);


Kenapa langsung transform.position? Karena RockScript sudah
menjadi bagian atau komponen dari Rock, jadi tidak perlu lagi deklarasi
GameObject atau Find atau semacamnya untuk mencari Object Rock.
Karena RockScript merupakan salah satu Component dari Object Rock.

B. Akses Component dalam Script


Setelah mengetahui caranya mengakses game object, selanjutnya
adalah cara mengakses component dari sebuah game object. Component
merupakan semua yang ada dalam suatu game object baik itu transform,
collider, dan lain-lain. Caranya sederhana saja, silakan ikuti langkah-langkah
di bawah.
1. Kembali ke RockScript kalian. Kali ini kita akan mengubah ukuran dari
collider dari Rock. Editlah script kalian menjadi seperti ini.

using UnityEngine;

public class RockScript : MonoBehaviour


{
BoxCollider rockCollider; // Deklarasi variabelnya

// Start is called before the first frame update


void Start()
{
transform.position = new Vector3(1, 1, 1); // Ubah
posisi
rockCollider = GetComponent<BoxCollider>(); //
GetComponent BoxCollider
rockCollider.size = new Vector3(5, 5, 5); // Ubah
size collider
}
}
2. Jangan lupa disave. Lalu kembali ke Unity dan tekan Play. kalian bisa
melihat di Inspector bahwa size dari collider yang tadinya 1 berubah
menjadi 5 sesuai yang dituliskan di kode.

Penjelasan Kode

BoxCollider rockCollider;

Pertama kita harus mendeklarasi variabelnya. Karena yang kita ingin


ubah adalah BoxCollider dari objek rock. Maka tulis juga BoxCollider.

rockCollider = GetComponent<BoxCollider>();

Kemudian kita melakukan inisiasi pada method Start dengan


mendapatkan componentnya. Yaitu dengan cara
GetComponent<NamaComponent>(). Tipe data yang dicari dan saat
deklarasi harus sama.

rockCollider.size = new Vector3(5, 5, 5);

Kemudian selanjutnya setelah mendapatkan BoxCollidernya, kita ubah


sizenya. Size memang sudah ada dalam Collider jadi dia bisa diakses.
Size juga merupakan Vector3 jadi harus menggunakan Vector3.
C. Pengenalan Collision Detection
Selanjutnya kita sudah mempelajari cara mendapatkan komponen.
Selanjutnya adalah kita akan mempelajari cara mendeteksi jika ada
benturan dengan yang benda lain. Ikuti langkah-langkah berikut agar
paham.
1. Buka kembali Unitynya. Dan buatlah sebuah Plane dengan klik kanan
hirarki > 3D Object > Plane. Dan aturlah object kalian semua agar berada
di atas Plane. Planenya saya akan ganti scalenya menjadi 10, 10, 10, agar
kelihatan luas.

2. Lalu tambahkan komponen Rigidbody pada Rock, yaitu dengan cara


tekan Add Component di Inspector Rock > Tulis Rigidbody > pilih
Rigidbody. Rigidbody merupakan komponen yang membuat suatu
objek menjadi seperti benda di dunia nyata karena memiliki gravitasi
dan massa.
3. Selanjutnya kembali ke RockScript. Dan edit scriptnya menjadi seperti
ini.

using UnityEngine;

public class RockScript : MonoBehaviour


{
BoxCollider rockCollider; // Deklarasi variabelnya

// Start is called before the first frame update


void Start()
{
transform.position = new Vector3(1, 1, 1); // Ubah
posisi

rockCollider = GetComponent<BoxCollider>(); //
GetComponent BoxCollider
rockCollider.size = new Vector3(5, 5, 5); // Ubah
size collider
}

/// <summary>
/// OnCollisionEnter
/// Pendeteksi jika objek bersentuhan dengan objek
lain
/// </summary>
/// <param name="collision"></param>
private void OnCollisionEnter(Collision collision)
{
Debug.Log("Terjadi collision dengan " +
collision.gameObject.name); // Akan memunculkan pesan
console
}
}
4. Jangan lupa save scriptnya dan selanjutnya Play scenenya. Kalian akan
melihat ada yang aneh di sana.

Yang aneh adalah Rocknya belum menyentuh Plane tetapi sudah


terdapat Console message mengatakan sudah terjadi sentuhan.
Mengapa? Dikarenakan kita sudah mengedit size dari BoxCollider
menjadi 5. Oleh karena itu anda bisa menghapus scriptnya sehingga
menjadi seperti di bawah ini. Untuk menghapus collider anda cukup
menghapus semua yang berhubungan dengan BoxCollider. Saya juga
akan menghapus position karena sedikit mengganggu. Kalian bisa
komen atau juga hapus.

using UnityEngine;

public class RockScript : MonoBehaviour


{
// Start is called before the first frame update
void Start()
{

/// <summary>
/// OnCollisionEnter
/// Pendeteksi jika objek bersentuhan dengan objek
lain
/// </summary>
/// <param name="collision"></param>
private void OnCollisionEnter(Collision collision)
{
Debug.Log("Terjadi collision dengan " +
collision.gameObject.name); // Akan memunculkan pesan
console
}
}
5. Jangan lupa save scriptnya dan Play scenenya.
Penjelasan kode

private void OnCollisionEnter(Collision collision)


{
Debug.Log("Terjadi collision dengan " +
collision.gameObject.name); // Akan memunculkan pesan
console
}
Method OnCollisionEnter akan mendeteksi jika game object
bersentuhan dengan objek lain. Dalam hal ini, rock bersentuhan dengan
Plane. Maka dari itu script mendeteksinya dan mengirimkan pesan ke
console. Untuk mendapatkan nama objek lain yang bersentuhan bisa
menggunakan name. Dengan memanfaatkan parameter collision, dan
hasilnya menjadi collision.gameObject.name

/// <summary>
/// OnCollisionEnter
/// Pendeteksi jika objek bersentuhan dengan objek lain
/// </summary>
/// <param name="collision"></param>
Yang di atas ini juga termasuk salah satu jenis komentar. Komentar tidak
akan dieksekusi oleh Unity. Komentar juga bisa digunakan untuk kode.
Jenis komentar di atas adalah multi-line comment. Komentar seperti
itu gunanya untuk dokumentasi saja. Karena jika kalian membuat
suatu project yang besar, dan suatu hari nanti kalian harus melihat
kembali kode itu, kalian bisa melihatnya di komentar maksud dari
kode yang kalian tuliskan. Catat baik-baik dan biasakan memberikan
komentar pada setiap kode kalian. Rule number 1 to be a developer.

D. Pengenalan Trigger
Selanjutnya adalah Trigger. Apa itu trigger? Jika diilustrasikan sebagai
sebuah pesawat tempur yang memiliki radar. Radar tersebut memiliki jarak
tertentu untuk mendeteksi keberadaan musuhnya. Jika musuh masuk
dalam jangkauan radar, maka radar akan mendeteksi musuh tersebut.
Sederhananya seperti itu. Mari kita praktekkan dengan Unity.
1. Kita mulai dengan contoh pertama yang paling simple. Tambahkan lagi
komponen BoxCollider pada Rock. Tetapi BoxCollider yang baru ini
centanglah isTriggernya. Hasilnya seperti di bawah.

2. Lalu kembali ke Script dan tambahkan menjadi seperti ini.

using UnityEngine;

public class RockScript : MonoBehaviour


{
/// <summary>
/// OnCollisionEnter
/// Pendeteksi collision jika objek bersentuhan dengan
objek lain
/// </summary>
/// <param name="collision"></param>
private void OnCollisionEnter(Collision collision)
{
Debug.Log("Terjadi collision dengan " +
collision.gameObject.name); // Akan memunculkan pesan
console
}

/// <summary>
/// OnTriggerEnter
/// Pendeteksi trigger jika objek bersentuhan dengan
objek lain
/// </summary>
/// <param name="other"></param>
private void OnTriggerEnter(Collider other)
{
Debug.Log("Terjadi trigger dengan " + other.name);
}
}
3. Jangan lupa save Scriptnya. Dan lihat hasilnya dengan Play scenenya.
Maka akan muncul pesan seperti yang ada di kode.
Penjelasan Kode

private void OnTriggerEnter(Collider other)


{
Debug.Log("Terjadi trigger dengan " + other.name);
}

Method OnTriggerEnter digunakan untuk mendeteksi jika collider yang


isTriggernya dicentang bersentuhan dengan collider lain. Sehingga
ketika collider box yang dicentang bersentuhan dengan collider plane
maka akan dideteksi dan mengirimkan pesan ke console.

Lalu apa perbedaannya dengan Collision yang tadi? Berikut perbedaannya:


1. Perbedaan yang paling pertama adalah parameternya. Parameter pada
method OnCollisionEnter merupakan Collision, sedangkan
parameter pada OnTriggerEnter merupakan Collider.
2. Perbedaan yang kedua adalah method OnCollisionEnter identik
dengan adanya benturan/sentuhan terhadap BoxCollider yang
isTriggernya tidak dicentang. Sedangkan method OnTriggerEnter
dengan adanya sentuhan dengan BoxCollider yang isTriggernya
dicentang.
Untuk lebih jelasnya lagi, mari kita praktikkan contoh kedua. Ikuti langkah
di bawah.
1. Pertama adalah silakan remove component BoxCollider yang baru tadi
dari Objek Rock. Sehingga BoxCollidernya hanya ada 1 dan isTriggernya
tidak dicentang.
2. Selanjutnya buatlah 2 balok yang berdiri. Caranya buat kubus terlebih
dahulu. Dan ubah Scale Y nya menjadi 5. Dan atur posisinya sehingga
berada di atas Plane. Hasilnya seperti di bawah ini.

3. Lalu tekan CTRL+D untuk duplikasi balok dan atur posisi X nya agak jauh
dari Cube yang tadi. Hasilnya seperti ini.
4. Atur serapi mungkin agar kelihatan bagus. Lalu Create Empty untuk
menyatukan kedua kubus tersebut. Beri nama Empty Objectnya Door.
Atur posisi Door menjadi 0, 0, 0 agar rapi. Dan masukkan Cube dan
Cube(1) menjadi children dari Door. Sehingga menjadi seperti ini.

5. Lalu klik Cube dan tambahkan BoxCollider dengan isTriggernya di


centang. Sehingga menjadi begini.
Mengapa dibutuhkan 2 box collider? Karena jika cuma ada box collider
yang isTrigger-nya dicentang, maka kubusnya akan jatuh menembus
Plane. Karena itu dibutuhkan 2 box collider. Satu yang menahan agar
tidak tembus dari Plane, satunya lagi yang mendeteksi Trigger.
6. Selanjutnya jika sudah, tekan Edit Collider pada Box Collider yang
IsTrigger-nya dicentang. Aturlah Collidernya agar menyentuh dengan
kubus yang satunya. Sehingga kalian bisa melihat collidernya (Garis
hijau) seperti ini.
7. Selanjutnya buatlah Script di folder scripts dengan nama “DoorScript”.
Dan Drag and Drop DoorScript ke Cube.
8. Buka scriptnya dan edit menjadi seperti ini.

using UnityEngine;

public class DoorScript : MonoBehaviour


{
/// <summary>
/// OnTriggerEnter
/// Mendeteksi jika ada yang memasuki area collider
/// Dieksekusi hanya sekali
/// </summary>
/// <param name="other"></param>
private void OnTriggerEnter(Collider other)
{
Debug.Log(other.name + " memasuki pintu");
}

/// <summary>
/// OnTriggerStay
/// Mendeteksi jika ada yang masih berada di area
collider
/// Dieksekusi setiap frame
/// </summary>
/// <param name="other"></param>
private void OnTriggerStay(Collider other)
{
Debug.Log(other.name + " masih berada di pintu");
}

/// <summary>
/// OnTriggerExit
/// Mendeteksi jika objek yang tadinya masuk dan sudah
tidak berada di area collider
/// Dieksekusi hanya sekali
/// </summary>
/// <param name="other"></param>
private void OnTriggerExit(Collider other)
{
Debug.Log(other.name + " sudah keluar dari
pintu");
}
}
9. Jangan lupa save. Dan coba mainkan. Tekan tombol Play dan klik Rock
dan pindahkan posisi X dan Z nya memasuki dan keluar dari Door alias
pintu. Hasilnya akan kalian lihat di console

Penjelasan Kode

private void OnTriggerEnter(Collider other)


{
Debug.Log(other.name + " memasuki pintu");
}
Method OnTriggerEnter merupakan Method yang digunakan untuk
mendeteksi jika ada collider lain memasuki area collider yang isTrigger.
Method ini hanya dieksekusi sekali saja.

private void OnTriggerStay(Collider other)


{
Debug.Log(other.name + " masih berada di pintu");
}
Method OnTriggerStay merupakan Method yang digunakan untuk
mendeteksi jika ada collider lain yang masuk dan tetap di area collider
yang isTrigger. Method ini dieksekusi tiap frame.

private void OnTriggerExit(Collider other)


{
Debug.Log(other.name + " sudah keluar dari pintu");
}
Method OnTriggerExit merupakan Method yang digunakan untuk
mendeteksi jika ada collider yang awalnya masuk dan akhirnya keluar
dari area collider yang isTrigger. Method ini dieksekusi hanya sekali.

Sekian modul kali ini, kalian sudah mengetahui dasar-dasar akses objek dan
komponennya dan mendeteksi Collision dan Trigger.

Unity Tips
MEMBUAT SCRIPT BARU DI INSPECTOR

Selain membuat script baru di project window, kalian juga bisa langsung
membuat script baru pada inspector dengan klik AddComponent > Ketik
nama script kalian > lalu enter hingga script terbuat di Inspector.

Gamification Series!!!
Source: https://www.youtube.com/watch?v=2kpFr0XFgFA

Pernahkah anda bosan dalam belajar Kimia? Aplikasi Gamification kali ini
akan membuat belajar Kimia menjadi menyenangkan, yaitu Elements 4D.
Aplikasi ini berbasis Augmented Reality. Jadi agar aplikasi berjalan sesuai
ekspektasi, dibuatlah kubus khusus yang tertulis unsur-unsur kimia. Lalu
pada saat perangkat diarahkan ke kubus itu maka akan berubah menjadi
elemen yang ada di dunia nyata. Jadi kita tidak perlu ke laboratorium lagi
untuk melihat bagaimana wujud dari suatu elemen.

Menarik, bukan?

Anda mungkin juga menyukai