diff --git a/README.md b/README.md index 43c5c3d9bc120294b8d568785b761ecc50d43445..438a18600578280cc6f41d6b803a291b6f9d4c64 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,50 @@ # IF3210-2020-Unity-13517096 Repository Tugas Besar 2 (Unity) Platform-Based Development -Nur Alam Hasabie (13517096) \ No newline at end of file +Nur Alam Hasabie (13517096) + +## Deskripsi aplikasi +Aplikasi merupakan sebuah game platformer , single-player, 2 dimensi. Game dibangun di atas Unity. + +## Cara bermain +W, Up Arrow : Lompat +A, Left Arrow : Gerak ke kiri +D , Right Arrow : Gerak ke kanan +Left Click, RightCtrl : Menembak +Anda diminta untuk mencetak skor sebanyak-banyaknya dengan menembaki musuh zombie. Darah anda akan berkurang ketika musuh dekat dengan anda. + +## Library +- Banyak modul pada program ini didasarkan pada tutorial Survival Shooter dari Unity : https://learn.unity.com/project/survival-shooter-tutorial +- Sprite musuh, pemain, dan tileset diambil dari https://craftpix.net/freebies/ +- Untuk parsing data JSON menggunakan litJson : https://github.com/Mervill/UnityLitJson + +## How Things Work +Terdapat 3 buah *scenes* pada permainan ini : +1. Main menu +2. Scoreboard +3. SampleScene (Main game) + +### 1. Main Menu +Main menu merupakan tempat landing awal permainan. Terdapat dua tombol , yakni tombol *start game* dan tombol *scoreboard*. Adapun options belum diimplementasikan + +### 2. Scoreboard +Scoreboard merupakan bagian yang menampilkan score dari pengguna berdasarkan waktu. Skor ditampilkan dalam bentuk text. Skor diambil dari API dengan menggunakan kelas WWW. Setelah itu, JSON diparsing dan diubah ke dalam bentuk teks. Dokumentasi API GET ada di spesifikasi tugas + +### 3. SampleScene(Main Game) +Scene pada awalnya menginisiasi beberapa objek . Objek-objek tersebut mencakup : +- Spawner +- Player +- Scene Manager + Audio (BGM) +- Tilemap (Platform) +- Background + +Selanjutnya, spawner akan mengeluarkan musuh setiap 3 detik sekali. +Pemain bergerak dengan RigidBody2D, dan ditambah dengan sebuah *collider* agar tidak jatuh menembus tileset dan memungkinkan adanya *trigger* pertemuan dengan collider musuh. Penggunaan RigidBody2D juga bermaksud agar gravitasi dapat disimulasikan oleh Unity. Untuk animasi , Player memiliki sebuah animator. +Musuh dibentuk dari sebuah prefab. Musuh bergerak lebih lambat. Musuh tidak dapat melompat. Selain itu, musuh selalu bergerak mendekati arah horizontal dari pemain. +Pergerakan masing-masing diatur dalam skrip PlayerMovement dan EnemyMovement. Kamera juga dibuat untuk selalu mengikuti pemain. +Adapun untuk penembakan, pada aplikasi ini peluru tidak digunakan. Sebagai pengganti, digunakan sebuah *LineRenderer* sebagai komponen dari Player. Ketika LineRenderer ditembakkan saat perintah tembak dijalankan, maka sebuah Raycast akan ditembakkan ke arah hadap Player. Raycast di-mask ke sebuah layer khusus. Bila mengenai musuh, maka script tembak akan memanggil perintah *damge* pada skrip EnemyHealth musuh. Bila darah musuh habis, maka musuh akan mati dan objek akan dihanguskan. +Musuh menyerang pemain dengan mendekati pemain. Saat *collider* musuh mengenai *collider* pemain, maka akan ada *trigger* yang memanggil fungsi *damage* pada skrip PlayerHealth. Bila darah PlayerHealth habis, maka permainan selesai. Saat permainan selesai dan sebelum berpindah ke *scene* main menu, terdapat sebuah kelas CustomSceneManager yang akan mengirimkan POST request ke API untuk menyimpan skor (Fitur username belum diimplementasikan). + +## Screenshot + +