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
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:)