Pada kesempatan kali ini saya ingin berbagi materi matakuliah Pemrograman Permainan yang diajarkan oleh Bapak Dolly Virgian Shaka Yudha Sakti.
Kita akan mencoba membuat GameObject bisa dikendalikan dengan mouse dan keyboard dengan menggunakan fungsi Raycast() dan Translate().
Translate() adalah fungsi supaya objek begerak secara relatif terhadap posisinya sendiri bukan posisi dunia.
Raycast() merupakan fungsi untuk menghasilkan koordinat vektor 3D berdasarkan penembakan ke arah yang dituju oleh kursor mouse.
Pertama kita akan mencoba fungsi Translate() untuk menggerakkan object dengan keyboard. Kita akan buat 3D Object Plane dengan cara klik GameObject -> 3D -> Plane.

Selanjutnya kita akan buat 3D Object Cube dengan cara klik GameObject -> 3D -> Cube lalu tambahkan Component Rigidbody melalui menu Component -> Physics -> Rigidbody.


Selanjutnya tambahkan asset gambar yang akan menjadi texture cube dengan cara klik kanan pada panel Assets lalu pilih Import New Assets kemudian pasang asset tersebut pada cube.
Kemudian atur posisi Cube sehingga berada di atas plane.

Selanjutnya buat skrip C# dan beri nama Translate.cs dan isi seperti berikut.


Untuk pembahasan skrip di atas, pada baris 11 terdapat inisialisasi Component Rigidbody. Yang berarti skrip ini harus dipasang di sebuah GameObject yang memiliki Component Rigidbody.
Pada baris 12 terdapat 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).
Pada baris 17 berfungsi untuk melakukan pergerakan Cube selama tombol keyboard ditekan dengan arah forward yaitu arah depan dari Cube, bukan arah depan dari Main Camera.
Pada baris 22 & 28 berfungsi untuk mendeteksi dua tombol keyboard sekaligus untuk membedakan pergerakan Cube ke kiri/kanan atau berputar ke kiri/kanan.
Pada baris 35 terdapat perintah untuk 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)
Pada baris 41 terdapat sebuah Raycast yang ditembakkan ke arah bawah untuk mendeteksi objek di bawahnya. Khusus untuk Raycast akan dibahas pada materi / script berikutnya.
Sekarang permainan sudah bisa dijalankan, cobalah menekan tombol spasi atau panah atas, bawah, kiri, kanan, kemudian coba tekan dan tahan tombol shift kiri dan panah kiri atau kanan kemudian lihat pergerakannya.
Hasilnya cube bisa digerakkan dengan tombol panah dan meloncat dengan tombol spasi.

Kedua kita akan mencoba fungsi Raycast() untuk menggerakkan object dengan mouse.
Buatlah sebuah plane dan beri nama Target, sesuaikan ukurannya sampai mengecil, beri warna lewat material, lalu atur posisinya berada di atas plane pertama.

Kemudian buat skrip C# dan beri nama RaycastCube.cs lalu isi seperti berikut.

Untuk pembahasan skrip di atas, pada baris 6 terdapat deklarasi variabel Ray yang akan menghasilkan Vector awal.
Pada baris 7 terdapat deklarasi variabel RaycastHit yang akan menghasilkan vector akhir (titik perpotongan Ray terhadap sebuah objek).
Pada baris 14 berfungsi untuk menggunakan klik pada mouse sebagai titik akhir dan posisi MainCamera sebagai titik awal. Fungsi ScreenPointToRay akan menghasilkan vector awal Ray.
Pada baris 15 terdapat 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).
Pada baris 16 terdapat perintah untuk memindahkan Plane kecil tepat ke posisi perpotongan tadi. Parameter 0.1f pada fungsi Vector3 membuat posisi Plane kecil agak sedikit naik.
Pada baris 17 terdapat perintah untuk membuat sebuah objek melihat ke objek lain.
Pada baris 18 terdapat 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.
Pada baris 19 & 20 berisi satu perintah, fungsi MoveTowards merupakan fungsi untuk pergerakan sebuah GameObject dari satu titik ke titik lain dengan kecepatan tertentu.
Pada baris 23 & 24 berisi satu perintah untuk menggambar sebuah Ray. Sedikit berbeda dengan fungsi lain, hasil dari fungsi ini hanya bisa dilihat di tab Scene setelah game dijalankan.
Selanjutnya pasang skrip tersebut ke GameObject Cube lalu isi kolom target dengan plane kedua yang kita buat dan biarkan kolom Is Moving tidak dicentang.
Sekarang permainan sudah bisa dicoba, klik kanan pada sembarang tempat maka plane target akan berpindah sesuai lokasi kursor mouse dan Cube akan menghadap ke arah plane target.
Hal lain yang dapat diperhatikan adalah pada saat permainan dijalankan, pada tab Scene akan terlihat garis lurus berwarna merah dari Main Camera menuju titik kursor mouse/plane target. Itu adalah fungsi dari Raycast() untuk interaksi antara user dengan lingkungan game.

Berikutnya hentikan permainan lalu centang kolom Is Moving dan jalankan kembali permainan. Sekarang selain hanya menghadap ke arah plane target, Cube juga akan bergerak menuju plane target.

Ketiga kita akan mencoba modifikasi sekali lagi permainan tersebut, dengan menggabungkan kedua materi ke dalam satu buah game.
Untuk memanfaatkan input mouse dan keyboard sekaligus kita bisa membuat konsep halang rintang. Pertama input mouse akan digunakan untuk memindahkan plane target, kemudia input keyboard digunakan untuk menghindari rintangan yang dilewati Cube yang sedang menuju ke plane target dengan berbelok atau melompat.

Sekian penjelasan dari saya, silakan komentar untuk berdiskusi atau bertanya seputar topik ini.
Terimakasih.
Untuk mengetahui info terbaru seputar Universitas Budi Luhur silakan kunjungi website https://www.budiluhur.ac.id/