Membuat Game Android Dengan Unity : Space Sonic (Part 3)


ssPada part 2, kita telah membuat kontrol pada objek utama berupa bergeser ke kiri dan kanan. Sesuai janji saya sebelumnya, kali ini kita akan membuat shoot system. Oke, langkah pertama, kita akan membuat objek pelurunya terlebih dahulu. Pada dasarnya peluru atau laser yang akan kita gunakan sebagai shooting system ini adalah berupa instantiate prefab, kemudian menentukan dammage dengan memanfaatkan OnCollisionEnter2D. Silahkan pilih objek laser pada folder sprite, kemudian drag kedalam scene

Selanjutnya buat C# script dengan nama ShootScript.cs .
Kita punya beberapa variable untuk setup behaviour lasernya. Dammage berfungsi sebagai satuan untuk mengurangi life point lawan, karena nantinya kita akan membuat beberapa tipe musuh dengan life point yang berbeda. Kemudian kita juga punya boolean dengan nama isEnemyshot dengan nilai default false, pada script ini berfungsi sebagai identifikasi apakah script ini di attach ke objek player atau enemy, supaya tidak terlalu banyak script. Variable lightDestroy sebagai efek ketika objek laser hancur atau mengenai / collision dengan objek yang dituju. Sedangkan laserTime kita gunakan untuk handle objek laser jika tidak collision dengan objek yang dituju, ketika laserTime = 0 maka objek laser ini destroy.
laserTime ini kita asumsikan sebagai satuan waktu, maka otomatis countdown dengan increament oleh Time.deltaTime. Dan untuk hal tersebut membutuhkan realtime, maka kita taruh fungsi tersebut didalam Update(). Seperti yang telah dibahas sebelumnya, kita mengingkan objek laser tersebut hancur jika laserTime = 0, maka kita hanya perlu menggunakan control if seperti pada script diatas.
Oke, selanjutnya adalah tindak lanjut dari boolean isEnemyShot, ini sebagai penentu direksi arah saja, jika !isEnemyShot berarti objek tersebut adalah player dan arah lasernya menuju sumbu Y positif, begitupun sebaliknya. Oiya, untuk penjelasan kenapa harus di FixedUpdate bisa dilihat penjabaran saya pada tutorial Simple Touch Input pada Unity 3D.
OnCollisionEnter2D adalah event yang terjadi ketika dua objek 2D atau lebih yang memiliki Collider2D saling bersentuhan atau bertabrakan. Ada 3 method event yang bisa digunakan, Enter, Stay, Exit. Dalam script ini kita menggunakan method enter dengan memanfaatkan tag dari objek. Untuk itu nantinya masing-masing objek harus diberi tag yang sesuai, jika player / hero beri tag player, jika enemy beri tag enemy. Dalam event tersebut kita memberi beberapa penugasan, seperti mengganti sprite renderer dengan objek light supaya emberikan efek cahaya ketika laser mengenai objek, merubah collider menjadi triger, dan beberapa penugasan lainnya. Selajutnya attach pada objek laser, kemudian wiring pada inspector sesuai kebutuhan. Buat folder baru pada asset dengan nama Prefab, drag objek laser yang berada pada scene tadi pada folder prefab tersebut, dan ya kita telah membuat laser untuk atau peluru untuk Player.

Script selanjutnya adalah Weapon script yang akan kita sematkan pada objek Player. Buat script baru dengan nama Weapon.cs kemudian tambahkan baris berikut :
Oke, kita punya beberapa variable, laserPrefab digunakan sebagai setup prefab laser yang telah kita buat tadi, isEnemyWeapon identifikasi apakah script ini di attach di player atau enemy, shootDelay untuk delay sepersekiandetik enemy laser diluncurkan, sedangkan waitToShoot sebenarnya digunakan untuk enemy attack, jarak waktu antara laser satu dengan yang lainnya.
Di function Update kita setup beberapa kebutuhan, diantaranya jika waitToshoot lebih dari 0 maka dec dengan delta time. Kemudian definisikan input untuk mengeluarkan laser / peluru dari objek Player dengan menggunakan tombol spasi pada keyboard. Pada statement if input tersebut tambahkan kondisi jika isEnemyWeapon = false, karena jika tidak ketika kita menekan tombol spasi baik dari player atau enemy akan sama-sama mengeluarkan laser. Jika kondisinya terpenuhi maka akan memanggil fungsi Fire(). Selanjutnya adalah kondisi jika script ini disematkan pada objek enemy, pada state tersebut kita definisikan beberapa action, seperti waitToShoot = shootdelay, instantiate prefab dan posisi saat pertama kali laser ditembakan.
Baris-baris terakhir ada fungsi fire, hampir sama seperti pada penjabaran sebelumnya pada state dimana objek = enemy. Alasan kenapa posisi y harus ditambah 0.5 karena jika kita biarakan default (0.0f), maka laser akan muncul dari posisi x=0 y=0 terhadap parent, supaya laser keluar muncul tepat didepan moncong objek, maka tambahkan nilai 0.5f. Terakhir kita mempunyai fungsi dengan ttipe data boolean, bool ini akan bernilai true jika waitToShoot lebih dari sama dengan 0. Cek pada kondisi isEnemyWeapon == true && EnemyAttack == true, maka laser akan ditembakan dari enemy looping terhadap shootDelay. Attach script ini pada objek Player, kemudian pada inspector masukan variable sesuai kebutuhan.

Jika sudah, hit play kemudian tekan tombol spasi dan lihat apakah semua fungsinya sudah berjalan dengan baik atau belum.
 
 

What’s Next :

Kita telah membuat shooting system pada objek player, selanjutnya kita akan membuat objek enemy beserta dammage pada masing-masing objek.

Full Script :

ShootScript.cs

 Weapon.cs

Post a Comment