Wednesday, April 29, 2020

Membuat Game Labirin Sederhana menggunakan Translate dan Raycast

Assalamualaikum wrwb

Salam sejahtera bagi kita semua

Kali ini saya akan mengimplementasikan fungsi Translate dan Raycast  yang diajarkan oleh dosen saya, yaitu Bpk. Dolly Virgian Shaka Yudha Sakti pada labirin sederhana.

Perlu diketahui Translate adalah sebuah fungsi untuk membuat sebuah objek bergerak secara relatif terhadap posisinya sendiri dan bukan pada posisi dunia. Contohnya jika tombol panah maju ditekan maka objek akan mau ke depannya dan bukan ke arah depan pandangan pengguna.

Fungsi Raycast() merupakan fungsi untuk melakukan penembakan ke arah yang dituju oleh kursor mouse dan menghasilkan koordinat Vector 3D.


Oke langsung aja langkah pertama ialah tentu saja buat project baru dengan nama TranslateRaycast



Setelah itu Tambahkan sebuah GameObject cube dan plane dengan cara klik menu GameObject -> 3D Object -> Cube/Plane dan tambahkan sebuah Component Rigidbody untuk cube melalui menu Component -> Physics -> Rigidbody.


Kemudian atur posisi Cube agar berada tepat di atas Plane seperti berikut dengan menggunakan gizmo atau panel Transform. Sampai langkah ini Anda sudah memiliki sebuah Cube yang memiliki massa dan dipengaruhi oleh gaya gravitasi yang diberikan oleh fungsi Rigidbody




Tambahkan sebuah asset gambar apapun dengan cara klik kanan pada panel Assets lalu pilih Import New ASsets… Pasang texture tersebut pada Cube dan Plane. Gambar ini hanya untuk membuat lebih menarik saja.



Setelah game object nya jadi langkah selanjutnya ialah membuat script dan berinama TranslateScript.cs lalu edit menjadi seperti ini


Pembahasan Code
Baris 12 : Inisialisasi Component Rigidbody. Script ini harus dipasang di sebuah GameObject yang memiliki Component Rigidbody.
Baris 13 : Inisialisasi variabel distGround yang isinya diambil dari Component BoxCollider, khususnya nilai y. Script ini harus dipasang di sebuah GameObject yang mengetahui seberapa jauh jarak antara Cube dengan tanah (Plane, Terrain, atau apapun yang di bawahnya).
Baris 19 : Melakukan pergerakan Cube selama tombol keyboard ditekan dengan arah forward yaitu arah depan dari Cube, bukan arah depan dari Main Camera.
Baris 24 & 30: Deteksi dua tombol keyboard sekaligus untuk membedakan pergerakan Cube ke kiri/kanan atau berputar ke kiri/kanan.
Baris 37 : Perintah memberikan ‘force’ kepada sebuah Component Rigidbody. Dalam hal ini, karena yang dimaksud dalam meloncat maka gaya yang diberikan hanya ke arah y positif (transform.up)
Baris 42 : Sebuah Raycast yang ditembakkan ke arah bawah untuk mendeteksi objek di bawahnya. Khusus untuk Raycast akan dibahas pada materi / script berikutnya.

Jika tidak ada kesalahan (debug) seharusnya game sudah bisa menggerakkan Cube menggunakan keyboard dan meloncat jika menekan tombol spasi.


Berikutnya Cube akan dibuat bergerak menuju suatu titik berdasarkan inputan dari mouse. 
Tambahkan sebuah Plane lainnya, beri nama Target. Kecilkan ukuran Plane tersebut dengan menggunakan gizmo scale dan tambahkan sebuah material dan beri warna tertentu sehinga plane target dapat terlihat kontras dengan Plane yang berada di bawahnya.



Buat Script dengan nama RaycastCube.cs lalu edit script tersebut menjadi seperti ini

Pembahasan Code
Baris 7 : Deklarasi variabel Ray yang akan menghasilkan Vector awal
Baris 8 : Deklarasi variabel RaycastHit yang akan menghasilkan vector akhir (titik perpotongan Ray terhadap sebuah objek)
Baris 16 : Menggunakan klik pada mouse sebagai titik akhir dan posisi MainCamera sebagai titik awal. Fungsi ScreenPointToRay akan menghasilkan vector awal Ray.
Baris 17 : Perintah untuk menembakkan sebuah Ray sepanjang 300 pixel ke depan (sesuai dengan arah titik mouse) dan menyimpan hasilnya di myRaycasthit yang berisi vector akhir (titik perpotongan Ray dengan Plane)
Baris 18 : Perintah untuk memindahkan Plane kecil tepat ke posisi perpotongan tadi. Parameter 0.1f pada fungsi Vector3 membuat posisi Plane kecil agak sedikit naik.
Baris 19 : Perintah untuk membuat sebuah objek melihat ke objek lain.
Baris 21 : Perintah untuk memeriksa jarak 2 titik apakah titik awal sudah sama dengan titik akhir. Karena bilangan float adalah bilangan pecahan, maka posisi transform terkadang tidak benar-benar tepat, maka perlu diberikan toleransi, dalam hal ini diberi toleransi 0.6f, sehingga Cube tidak harus benar-benar tepat di posisi tujuan untuk bisa berhenti bergerak.
Baris 23 & 24 : Merupakan satu perintah, fungsi MoveTowards merupakan fungsi untuk pergerakan sebuah GameObject dari satu titik ke titik lain dengan kecepatan tertentu.
Baris 28 & 29 : Merupakan satu perintah untuk menggambar sebuah Ray. Sedikit berbeda dengan fungsi lain, hasil dari fungsi ini hanya bisa dilihat di tab Scene setelah game dijalankan.


Pasang script tersebut di GameObject Cube, isikan parameter target dengan GameObject plane target yang tadi sudah dibuat. Untuk percobaan awal, biarkan parameter Is Moving tidak dicentang kemudian jalankan Game. Klik kanan pada sembarang tempat di plane pertama, perhatikan plane yang dipasang material akan berpindah pada posis tepat di posisi mouse dan Cube berputar sesuai dengan arah Plane tersebut.



Hal lain yang menarik dari proses ini adalah ketika Anda berpindah dari tab Game ke tab Scene saat Game masih berjalan. Anda dapat melihat sebuah garis lurus berwarna merah yang ditembakkan langsung dari GameObject Main Camera menuju titik pusat plane kecil (target). Kira-kira seperti itulah bentuk ‘nyata’ dari fungsi RayCast yang merupakan salah satu fungsi utama yang sering digunakan untuk menciptakan interaksi antara user dengan lingkungan game.




Kursor mouse TIDAK PERNAH TAHU benda apa yang diklik dalam game. Satu-satunya yang bisa dilakukannya hanya mengirimkan posisi koordinat yang diklik. RayCast merupakan fungsi untuk melakukan penembakan ke arah yang dituju oleh kursor mouse dan menghasilkan koordinat Vector3D (dalam hal ini Plane). Pada posisi perpotongan antara garis merah dan plane putih itulah, objek target berpindah.

Langkah selanjutnya adalah, matikan kembali game, lalu centang parameter Is Moving, dan jalankan kembali game. Kini Cube juga akan bergerak arah posisi titik yang diklik oleh mouse.




Setelah berhasil, lalu jadikan Cube tersebut sebagai prefab dengan cara buat prefab pada Assets dengan Klik Kanan pada Assets -> Prefab. Setelah itu drag and drop Cube pada tab Hierarchy ke prefab tersebut 


Kalau sudah berhasil hapus object cube pada tab hierarchy.
Langkah selanjutnya ialah membuat tembok labirin dengan cara klik menu GameObject -> 3D Object -> Cube. Atur ukuran dan posisi Cube tersebut agar tepat berada di tepi Plane sebagai dinding pembatas menggunakan gizmo atau transorm panel.


Berikan sebuah asset gambar tekstur tembok dengan cara klik kanan pada panel Assets lalu pilih Import New ASsets… Pasang texture tersebut pada tembok tersebut.

Setelah itu jadikan tembok tersebut sebagai prefab dengan cara drag and drop pada tab Hierarchy ke Prefab.

Langkah selanjutnya ialah buat tembok tersebut agar berada di tiap sisi pada plane seperti ini, buatlah jarak pada tepi kiri dan kanan sebagai jalan keluar Kotak nanti.


Atur posisi Main Camera menjadi diatas plane supaya Labirin yang kita buat terlihat oleh Camera, atur menggunakan gizmo atau panel transform pada tab inspector


Langkah selanjutnya ialah membuat tembok labirin seperti dibawah ini menggunakan prefab tembok yang tadi sudah kita buat


Lalu tambahkan Prefab kotak yang sudah kita buat tadi kedalam labirin tersebut

Setelah selesai jalankan game tersebut jika tidak ada eror maka kotak akan bisa digerakan melalui arah keypad pada keyboard dan dapat meloncat jika ditekan spasi.




Sekian tutorial dari saya, apabila ada kesalahan mohon dikoreksi. Terimakasih see u nexttt:)

Saturday, April 25, 2020

Tutorial Membuat Prefab pada Unity

Assalamualaikum wr wb

Salam sejahtera bagi kita semua

Kali ini saya akan mencoba membagikan sebuah tutorial membuat prefab pada unity seperti apa yang sudah diajarkan oleh dosen saya sendiri yaitu bapak Dolly Virgian Shaka Yudha Sakti M.Kom

Sebelum masuk ke Tutor saya akan menjelaskan sedikit tentang prefab, Prefab merupakan sebuah GameObject yang disimpan ke dalam Assets, yang nantinya bisa dimanfaatkan menjadi GameObject kembali.

Dan saya disini akan menggunakan fungsi baru, yaitu Fungsi Instantiate() atau yang dalam banyak forum lebih sering disebut dengan: "Fungsi untuk membuat GameObject secara runtime."

Langkah pertama ialah buatlah Project baru dengan nama TutorPrefab


Jika sudah berhasil, lalu tambahkan object 3D Plane dengan cara klik menu GameObject -> 3D Object -> Plane lalu ganti namanya menjadi Lantai1.


Atur posisi Main Camera dan plane menggunakan gizmo atau panel Transform sehingga Kamera dapat melihat lantai dengan jelas berada di bawah.


Tambahkan plane kedua, ganti namanya menjadi Lantai2 dan atur scalenya menggunakan tombol Scale di pojok kiri atas atau masukkan angkanya pada panel transform. Angkat posisi Lantai2 sedikit ke atas



atur kemiringan Lantai2 sehingga mirip seperti gambar berikut.


Jika sudah seperti diatas, langkah selanjutnya adalah membuat GameObject Child dengan cara Klik Lantai2 pada tab Hierarchy lalu klik GameObject -> Create Empty Child. Kita beri nama TitikJatuh



Atur posisi GameObjectChild tadi menggunakan gizmo atau panel Transform sehingga sedikit di atas Lantai2 seperti gambar berikut.



Selanjutnya, tambahkan object Sphere dengan cara klik menu GameObjects -> 3D Object -> Spphere dan ganti namanya menjadi MyBall.



Agar terlihat lebih menarik, Tambahkan sebuah gambar pada panel Assets dengan cara klik kanan pada panel Assets -> Import New Assets..., lalu pilih salah satu gambar yang ada di komputer Anda.



Dari panel Assets, drag gambar tersebut menggunakan mouse lalu letakkan pada MyBall, Lantai1 dan Lantai2 dengan cara drag and drop sehingga terlihat seperti di bawah ini.



Lalu kita tambahkan efek Rigidbody dengan cara 
Klik MyBall dan tambahkan RigidBody dengan cara klik menu Component -> Physics -> Rigidbody.
Perlu diketahui, Rigidbody sendiri adalah sebuah komponen penting yang dapat membuat GameObject seolah-olah memiliki berat dan dapat dipengaruhi oleh gaya gravitasi.


Buat sebuah Physic Material dengan cara klik Assets -> Create -> Physics Material dan beri nama Bounce.


Ganti parameter Bounciness menjadi 0.9 untuk menambahkan efek memantul.


Kita kembali ke GameObject MyBall, tambahkan Material Bounce dengan cara drag dari panel Assets ke panel Sphere Collider, parameter material. Atau klik tombol kecil di kolom Material pada komponen Sphere Collider milik MyBall




Langkah berikutnya ialah membuat prefab, Prefab adalah sebuah instansiasi dari sebuah GameObject sehingga GameObject yang sudah pernah dibuat bisa digunakan kembali dengan cepat. Selain itu Prefab memungkinkan GameObject digandakan menggunakan script.

Pertama, buat file prefab pada Assets dengan cara klik Assets -> Create -> Prefab


Berikutnya untuk menjadikan MyBall prefab bisa dilakukan dengan cara drag MyBall dari tab Hierarchy ke panel Assets.


Jika Prefab MyBall sudah dibuat, Anda dapat menghapus GameObject MyBall dari tab Hierarchy, karena yang akan kita gunakan adalah Prefab yang sekarang sudah ada di Assets.

Berikut ini contoh penggunaan kembali Prefab menjadi GameObject. Dengan cara drag and drop MyBall pada Prefab lalu letakkan dalam scene. Jika sudah mulai paham, hapus object bola di dalam scene.



Jika sudah, Buat script C# dan beri nama GandakanBola.cs lalu ubah script menjadi seperti berikut ini


Pembahasan Code

Baris 8, Variable TempatJatuh pada baris ke 8 akan berisi koordinat GameObject ‘muncul’. Jadi yang kita perlukan dari TitikJatuh hanyalah posisinya saja, bukan objeknya. Variabel Bola digunakan untuk GameObject yang akan diduplikasi.

Baris 15 - 18, Kunci dari materi ini, yaitu perintah untuk menduplikasi objek Bola di posisi TitikJatuh (position+rotation)

Baris 19, perintah untuk menghancurkan GameObject 5 detik setelah diciptakan. jika perintah ini tidak dibuat, maka game akan memakan banyak memori karena terus memproduksi GameObject.

Baris 26, Perintah untuk menjalankan Button "Buat Bola" dengan menggunakan tombol Spasi


Selanjutnya pasang script tersebut di GameObject mana saja yang Anda suka dengan cara drag and drop, lalu pastikan parameter TempatJatuh diisi dengan GameObject TitikJatuh, sedangkan parameter Bola diisi dengan prefab MyBall.



Jalankan Games dan klik tombol Buat Bola atau dengan menekan tombol Spasi berkali-kali. Perhatikan pula kondisi tab Hierarchy dengan seksama, semua GameObject yang terbentuk dan terterah di sana akan menghilang secara otomatis setelah 5 detik. Beginilah cara Unity membuat GameObject secara runtime sekaligus menjaga kestabilan penggunaan memori pada Komputer.



Sekian Tutor kali ini, kurang lebihnya mohon maaf, see u next time !

Wednesday, April 1, 2020

Tutorial membuat Interaksi antar Object pada Unity

Assalamualaikum wrwb

Salam sejahtera bagi kita semua

Kali ini saya akan memberikan sebuah tutorial yang sebelumnya diajarkan oleh bapak Dolly Virgian Shaka Yudha Sakti.

Kita akan membuat sebuah interaksi antar objek,  yaitu membuat sebuah objek tersebut bergerak bersamaan  satu sama lain.

Perlu diketahui, ada beberapa cara yang bisa dilakukan sebuah script untuk berinteraksi dengan GameObject, diantaranya:
1. Pasang script langsung pada object.
2. Pasang script pada object lain, lalu menggunakan fungsi untuk mencari object yang dituju.


Hal yang dilakukan pertama kali ialah buatlah Project baru dengan nama InteraksiObject



Setelah itu tambahkan 3D Object (disini saya menggunakan Kubus sebagai object) dengan cara klik menu GameObject -> 3D Object -> Cube.



Setelah kita berhasil menambahkan kubus Posisikan Cube agar berada di depan kamera. Salah satu caranya: drag panah warna biru untuk pergeseran posisi z, warna merah untuk posisi x, dan warna hijau untuk posisi y


Lalu buatlah tiga kubus yang sama dengan cara dengan duplikasi object (Ctrl+D), atau dengan klik kanan pada Cube di Hierarchy dan pilih Duplicate, sehingga terdapat empat buah kubus


Atur keempat posisi kubus tersebut agar terlihat berbaris didepan kamera caranya bisa dengan mengatur koordinat pada Transform (Inspector) atau drag menggunakan gizmo.



Selanjutnya ialah kita akan membuat sebuah Tag baru dengan cara klik salah satu game object manapun, lalu pada tab Inspector klik Tag->Add Tag..->beri nama "Kotak1"-> Save



Pilih Kubus4 pada Hierarchy dan ganti tag nya pada inspector menjadi "Kotak1". kenapa kubus4? karena saya akan menggunakan kubus4 pada script saya nanti.



Berikutnya ubah proyeksi MainCamera (pada Inspector) menjadi Orthographic dan size menjadi 2.
  • Perspective : ini sama seperti dalam kehidupan kita, misalnya kamera atau mata kita yang melihat alam ini, arah pandang kamera menyebar, sehingga semakin jauh benda terlihat semakin mengecil. Lihat kubus saat proyeksi kamera perspective mengecil bukan?
  • Orthographic : ini sama seperti gambar blueprint, sketsa gambar arsitektur (yang bukan 3D), scanner, dll. arah pandang kamera lurus dan paralel, sehingga semakin jauh benda tetap terlihat sama seperti yang dekat. Lihat kubus saat proyeksi kamera orthographic baik dekat maupun jauh ukurannya sama bukan?


Langkah selanjutnya ialah membuat folder, agar asset, objek maupun script dapat tertata rapih dengan cara klik kanan pada Assets, pilih Create -> Folder->Kita berinama Script.



Selanjutnya kita membuat file Script C# pada folder yang kita buat tadi dengan cara Klik kanan pada folder Script->Create->c# Script->beri nama ScriptKubus.cs dan edit file menjadi seperti berikut.


Pembahasan Code

Baris 7 : berisi 4 variabel boolean yang akan mengatur baris mana saja yang akan aktif pada fungsi Update().
Baris 13: baris ini akan memutarkan kubus yang dipasangi script. Misalnya, script ini dipasang di Kubus1, maka Kubus1 yang akan berputar, jika script dipasang pada Kubus2, maka Kubus2 akan berputar
Baris 14: baris ini akan memutarkan sebuah kubus yang memiliki nama tertentu menggunakan fungsi Find().
Baris 15: baris ini akan memutarkan sebuah kubus yang memiliki tag tertentu menggunakan fungsi FindGameObjectWithTag().
Baris 16: baris ini akan memutarkan sebuah instansiasi GameObject yang didaftarkan oleh user berdasarkan input dari GameObject tertentu yaitu melalui parameter Pilih Objek.


Setelah kita edit file script nya, pasang file script tersebut pada Kubus1 dengan cara drag and drop file script tersebut ke Kubus1 pada Hierarchy



Centang pilihan Cube 1 pada tab inspector Kubus1 


Lalu Jalankan game tersebut. Jika tidak ada error maka hasilnya akan seperti ini



Selanjutnya ketik “Kubus2” pada parameter Pilih Kubus dan centang Cube 2. Maka hasilnya akan seperti ini



Berikutnya ketik “Kotak1” pada parameter Pilih Tag dan centang Cube 3.



Selanjutnya klik browse (tombol bulat kecil) pada parameter Pilih Objek, pilih tab Scene dan pilih Kubus3, lalu centang Cube 4.


Maka jika kita jalankan akan seperti ini



Terakhir apabila kita ingin membuat semua kubus tersebut bergerak bersama satu sama lain, ialah dengan cara centang cube1,cube2,cube3,cube4,  lalu ketik "Kubus2" pada parameter Pilih Kubus, ketik "Kotak1" pada parameter Pilih TagSelanjutnya klik browse (tombol bulat kecil) pada parameter Pilih Objek, pilih tab Scene dan pilih Kubus3. Kurang lebih seperti ini


TARAAAAA MAKA HASILNYA SEMUA KUBUS AKAN BERGERAK SATU SAMA LAIN SEPERTI DIBAWAH INI



Sampai disini dulu tutorial kali ini, jika ada kekurangan maupun kesalahan mohon maaf sebelumnya. See u next !

Enjoy Read :)