Mouse click/mouse klik merupakan metode input yang sangat berguna dalam pengembangan game. Hampir seluruh game menggunakan mouse sebagai media input terutama di game ber-platform PC.
Nah, kali ini saya akan memberikan sedikit ilmu cara mendeteksi mouse click pada objek 3 Dimensi di game engine bernama Unity.
Konsep Dasar
Sebelum kita memulai, mari kita pahami terlebih dahulu konsep dasar dari "mendeteksi mouse click" yang akan kita bahas. Apa maksud dari mendeteksi mouse click? Apa manfaatnya?
Maksud dari mendeteksi mouse click adalah pengecekan terhadap ada tidaknya tombol mouse yang diklik selama run time. Karena selama run time, pengecekan akan dilakukan secara terus menerus atau berjalan dari frame ke frame berikutnya.
Belum mengerti?
Begini, maksud dari run time di atas adalah posisi game ketika sedang berjalan. Dan game berjalan berdasarkan frame-rate. Jadi, ketika game berjalan, otomatis game akan membentuk beberapa frame yang berganti dari frame ke frame berikutnya dengan kecepatan tertentu.
Nah, setiap kali frame itu berganti, game atau sistem akan mengecek ada tidaknya tombol mouse yang diklik.
Lalu apa manfaatnya jika kita tahu cara mendeteksi ada tidaknya tombol mouse yang diklik?
Jika kita tahu, manfaatnya adalah, tentu kita bisa memberi perintah atau script apapun ketika tombol mouse diklik. Seperti perintah menembak ketika tombol kiri diklik dalam game fps, perintah mengganti scene ke scene lain ketika tombol "next level" diklik, dan lain-lain.
Dan kali ini kita akan membahas pendeteksian mouse click pada objek 3 Dimensi.
Cara Mendeteksi Mouse Click pada Objek 3D di Unity
- Pastikan kamu telah menyiapkan objek 3D yang hendak diberi fungsi "mendeteksi mouse click". Jika belum, tambahkan objek 3D dengan cara mengklik menu GameObject > 3D Object > pilih objek sesukamu. Kita ambil contoh objek Cube.

Menambah objek Cube - Perhatikan pada objek 3D yag telah kamu siapkan. Klik objek tersebut dan cek pada tab inspector, apakah di sana telah ada component collider? Jika ada, lanjut ke langkah nomor 3. Jika belum, tambahkan component collider dengan cara mengklik Add Component > Phsyics > Box Collider (atau collider lain sesuai bentuk objekmu).

Tab Inspector 
Box Collider - Buat file C# dengan mengklik Assets > Create > C# Script. Beri nama file tersebut sesukamu.

Menambahkan file C# - Edit file C# tadi dengan mengklik dua kali file pada tab Project sehingga akan terbuka window Editor. Di sini saya menggunakan Editor bawaan, yaitu MonoDevelop.
- Setelah terbuka, tiba waktunya bagi kita untuk mengetik script. Ketik script di bawah ini ke dalam fungsi Update().
if (Input.GetMouseButtonDown (0)) {
RaycastHit hit;
Ray ray;
ray = Camera.main.ScreenPointToRay (Input.mousePosition);
if (Physics.Raycast (ray, out hit)) {
if (hit.transform.name == "Cube") {
Debug.Log ("Objek terklik!");
}
}
} - Jangan lupa save file script C# tersebut.
- Tambahkan file C# tadi ke objek 3D yang telah dipersiapkan sebelumnya dengan cara Drag and Drop dari tab Project ke objek 3D tersebut secara langsung.

Drag and Drop file yang sudah disave ke Cube - Run game dan coba klik objek 3D-mu. Perhatikan pada tab Console dan lihat apakah ada log dengan tulisan "Objek cube terklik!"? Jika iya berarti kamu telah berhasil. Jika tidak, sepertinya ada sesuatu yang salah. Coba cek ulang codenya lagi!

Log pada Console
Penjelasan
if (Input.GetMouseButtonDown (0)) {
Code ini berfungsi untuk mengecek kondisi: apakah tombol kiri mouse (0) diklik? Jika ya maka apa yang akan terjadi? Perintah "Apa yang akan terjadi" itu ditulis di antara tanda kurawal {}. Akan tetapi, "apa yang akan terjadi" itu akan berjalan ketika kamu mengklik di mana pun. Untuk itu, dibutuhkan metode Raycasting. FYI: Jika kamu ingin mengganti tombol kiri menjadi tombol kanan, gantilah angka 0 menjadi 1.
RaycastHit hit;
Ray ray;
ray = Camera.main.ScreenPointToRay (Input.mousePosition);
RaycastHit hit;
Ray ray;
ray = Camera.main.ScreenPointToRay (Input.mousePosition);
if (Physics.Raycast (ray, out hit)) {
if (hit.transform.name == "Cube") {
Debug.Log ("Objek terklik!"); } }
Code di atas adalah serangkaian code Raycasting yang berfungsi membuat garis lurus untuk mendeteksi ada tidaknya objek dengan collider di sana. Objek tanpa collider tidak terdeteksi oleh metode Raycasting. Maka jika garis lurus tersebut menyentuh sebuah collider, code di dalam statement if seperti di bawah ini akan berjalan. Jika garis tidak menyentuh apapun, ya tidak terjadi apa-apa. Kecuali jika kamu menambahkan statement else setelah if.
if (Physics.Raycast (ray, out hit)) {
if (hit.transform.name == "Cube") {
Debug.Log ("Objek terklik!"); } }
Lalu bagaimana jika kita mau mendeteksi objek yang spesifik? Caranya adalah dengan membuat persamaan kondisi, bisa dengan nama, ID, tag, dll. Pada code di atas saya menggunakan nama, di mana nama tersebut tersimpan dalam variable hit.
if (hit.transform.name == "Cube") {
Debug.Log ("Objek terklik!"); }
Mudahnya, ketika Raycast berhasil mendapatkan collider (artinya hit != null), maka informasi objek tersebut tersimpan dalam variable hit.
Sedikit penjelasan tentang Raycasting, Raycasting adalah metode untuk mendeteksi objek dengan membuat garis lurus. Posisi garis lurus tersebut ditentukan dalam variable ray, di mana variable ray tersebut berisi informasi tentang lokasi mouse. Info lengkap tentang Raycasting, kunjungi dokumentasi Unity berikut.
Hasil Akhir
Kebanyakan orang akan bingung jika tidak melihat code dari tutorial secara keseluruhan, termasuk saya. Nah, semoga code selengkapnya di bawah ini bisa memperjelas, ya.
using UnityEngine;
using System.Collections;
public class NewBehaviourScript : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per f rame
void Update () {
if (Input.GetMouseButtonDown (0)) {
RaycastHit hit;
Ray ray;
ray = Camera.main.ScreenPointToRay (Input.mousePosition);
if (Physics.Raycast (ray, out hit)) {
if (hit.transform.name == "Cube") {
Debug.Log ("Objek terklik!"); }
}
}
}
}
Semoga berhasil!
