Kamis, 15 Oktober 2020

Unity Platformer Tutorial [Part 2]


 

Ini adalah tutorial lanjutan dari part 1. Di tutorial part 2 ini, kamu akan membuat player melompat, menggerakkan camera, dan membuat sebuah prefab.

Tutorial part 2 ini memerlukan waktu minimal 30 menit.

Membuat Player Melompat

Kamu bisa mencoba untuk membuat player melompat dengan cara yang sama seperti kita menggerakkan player ke kiri dan ke kanan:
 
Script ini tidak akan digunakan

Script diatas dapat membuat player melompat, tapi script itu membolehkan player untuk terbang.
Player jadi bisa terbang, karena selama kamu menekan tombol panah atas (up arrow), ia akan men-set velocity y menjadi 5.
Harusnya, player hanya bisa melompat kalau sedang menyentuh tanah.
Jadi pseudocode dari script yang akan kita tambahkan adalah:
Kalau tombol panah atas sedang ditekan dan player sedang menyentuh tanah, maka ubah nilai velocity y menjadi 7.
Tetapi bagaimana kita mengecek kalau player sedang menyentuh tanah?
Untuk melakukan itu, kita akan membuat sebuah "sensor" yang mengikuti player, seperti berikut:

Sensor diletakkan dibawah player
Sensor ini tidak akan terlihat.

Mulailah dengan membuat sebuah GameObject kosong (Hierarchy -> Create -> Create Empty) bernama "player ground sensor".
Kemudian buatlah sebuah script untuk sensor ini bernama "FollowPlayer". Script ini akan membuat sensor itu mengikuti si player:

FollowPlayer.cs

Kemudian, ubah nilai y Offset dari komponen Follow Player (Script) dari "player ground sensor" menjadi -0.5, supaya sensor tidak mengikuti pivot/center (tengah) si player, tetapi 0.5 unit dibawahnya.

Posisi sensor = Posisi player - 0.5
Sekarang, sensor sudah ada, dan sudah mengikuti si player.
Yang kurang adalah scriptnya yang mengecek kalau player sedang menyentuh tanah atau tidak. Kita hanya perlu mengubah script Player.cs saja.

Mulailah dengan mendeklarasi variabel-variabel seperti berikut (ke script Player.cs):


groundSensor adalah sebuah variabel yang akan diisi menjadi sebuah sensor yang akan kita buat nanti.
groundSensorRadius adalah ukuran radius si sensor dengan nilai standar 0.1f.
jumpforce adalah tenaga untuk melompat dengan nilai standar 7.
whatIsGround adalah sebuah variabel yang akan diisi dengan layer "Ground" nanti.

Layer player adalah Default

Nanti, layer "ground" dan "ground grass" akan diubah menjadi sebuah layer baru yang dinamai "Ground".

onGround adalah sebuah variabel bertipe boolean, yang nanti akan kita atur supaya nilainya menjadi true ketika sensor sedang menyentuh tanah, dan false ketika sensor tidak menyentuh tanah.

Sekarang, kita akan mengubah fungsi Update () di script Player.cs menjadi seperti berikut:



Penjelasan Script

if (Input.GetKey (KeyCode.UpArrow) && onGround) {
If Statement ini menjadi true kalau tombol panah atas sedang ditekan dan player sedang menyentuh tanah.

onGround = Physics2D.OverlapCircle (groundSensor.position,  groundSensorRadius, whatIsGround);
Baris kode ini mengubah nilai onGround menjadi true kalau si sensor sedang menyentuh sebuah GameObject yang layernya adalah whatIsGround, dan false kalau sensor tidak menyentuh sebuah GameObject yang layernya adalah whatIsGround.

Sekarang, kita perlu mengubah layer "ground" dan "ground grass" menjadi Ground.
Sebelum itu, kita perlu membuat layer baru. Klik sebuah GameObject dan klik Layer -> Add Layer..., kemudian tambahkan sebuah layer bernama "Ground", seperti ini:

Membuat sebuah Layer "Ground"
Ubah layer "ground" dan "ground grass" dari "Default" menjadi "Ground" seperti ini:


Sekarang, di Unity, ubah komponen Player (Script) dari GameObject player menjadi seperti ini:


(drag-and-drop si sensor dari bagian Hierarchy ke variabel Ground Sensor)

Selesai! Mestinya si player sudah bisa melompat.

Menggerakkan Camera

Bagaimana caranya untuk menggerakkan camera supaya camera mengikuti player?
Caranya sangat mudah, tambahkan script FollowPlayer ke Main Camera.
Mestinya Camera akan mengikuti player ketika game di play, tetapi camera akan berubah menjadi langit semua, seperti ini:


Ini terjadi karena posisi z Main Camera adalah 0, yang harusnya adalah -10.
Kita harus mengubah script FollowPlayer.cs menjadi seperti ini:

FollowPlayer.cs

Kita menambahkan sebuah variabel publik zOffset dan mengubah Vector2 menjadi Vector3.

Setelah itu ubah nilai z Offset dari komponen Follow Player (Script) dari Main Camera menjadi -10. Sekarang, mestinya Camera sudah mengikuti player dengan benar.

Membuat Prefab Untuk Platform

Sebuah prefab adalah sebuah GameObject dengan properti yang telah ditentukan. Kamu bisa men-drag sebuah prefab ke bagian Hierarchy seperti kamu telah men-drag sebuah sprite ke bagian Hierarchy, tetapi mereka akan memiliki semua komponen dan nilai yang sudah jadi.

Kamu bisa membuat sebuah prefab dengan men-drag sebuah GameObject dari bagian Hierarchy ke bagian Projects.
Kamu juga bisa mengubah sebuah prefab seperti kamu mengubah sebuah GameObject, tetapi bedanya adalah semua GameObject yang mengikuti si prefab ini juga akan berubah. Ini adalah kelebihan prefab dari GameObject biasa.

Buatlah sebuah folder bernama "Prefabs" (di bagian Projects).
Kemudian, buatlah sebuah prefab untuk "ground" dan "ground grass" seperti berikut:


Seperti yang kamu lihat di atas, GameObject yang men-referensikan sebuah prefab warnanya menjadi biru. Tapi ground (1), ground (2), dll warnanya belum biru.
Yang harus kamu lakukan adalah menghapus semua GameObject yang belum men-referensikan sebuah prefab, seperti ini:


Setelah itu kamu bisa membuat level lagi dengan mengopi atau menduplikat blok-blok itu.

Selanjutnya silahkan lanjutkan ke part 3!

 

Tidak ada komentar:

Posting Komentar