Mengontrol mouse virtual dengan pengontrol game di Unity

Saat mengembangkan game Android untuk berbagai faktor bentuk—termasuk perangkat foldable, tablet, dan layar besar—pemain sering kali menghubungkan pengontrol atau gamepad eksternal. Untuk layar UI yang awalnya didesain untuk interaksi sentuh atau mouse, menjelajahi menu dengan pengontrol bisa jadi sulit.

Meskipun mendesain ulang arsitektur UI Anda di sekitar navigasi D-pad standar umumnya memberikan pengalaman pengguna yang lebih baik, hal ini mungkin tidak selalu dapat dilakukan untuk project yang sudah ada. Sebagai opsi alternatif, Unity Input System menyediakan komponen VirtualMouseInput. Komponen ini memungkinkan Anda menggerakkan kursor perangkat lunak virtual di layar menggunakan gamepad atau pengontrol yang terhubung.

Tentang VirtualMouseInput

Komponen VirtualMouseInput adalah utilitas tingkat tinggi dalam paket Unity Input System yang menjembatani input gamepad ke kontrol kursor di layar, interaksi pointer UI, dan peristiwa layar sentuh simulasi. Saat aktif, fitur ini:

  • Membuat perangkat mouse virtual: Perangkat ini mendaftarkan mouse yang disimulasikan software di Unity Input System bersama dengan perangkat penunjuk fisik.
  • Memetakan kontrol gamepad ke tindakan kursor: Anda dapat mengikat stik analog atau D-pad untuk memindahkan kursor di layar, dan memetakan tombol pengontrol (seperti Tombol Selatan / A) untuk menyimulasikan klik mouse kiri, kanan, atau tengah.
  • Terintegrasi dengan UI Unity: Dengan bekerja secara lancar dengan InputSystemUIInputModule, elemen UI standar seperti tombol, tombol alih, dan penggeser merespons kursor virtual persis seperti yang dilakukan pada interaksi sentuh atau mouse hardware.
  • Menggerakkan kursor visual: Memungkinkan Anda menetapkan Graphic UI (seperti komponen Image) yang secara otomatis melacak dan merender posisi kursor virtual di layar.

Menggabungkan mouse virtual dengan TouchSimulation

Jika game Anda awalnya dirancang secara eksklusif untuk layar sentuh dan mengandalkan skrip atau API sentuhan langsung, mouse virtual tidak akan otomatis memicu logika deteksi sentuhan yang ada karena terdaftar sebagai perangkat mouse, bukan perangkat layar sentuh.

Untuk mendukung interaksi kursor yang digerakkan gamepad tanpa menulis ulang kode penanganan sentuh lama, Anda dapat menggunakan fitur TouchSimulation Unity Input System bersama dengan VirtualMouseInput:

  • Cara kerjanya: Jika diaktifkan menggunakan TouchSimulation.Enable(), Sistem Input akan otomatis mengonversi klik dan gerakan penunjuk dari perangkat mouse aktif mana pun—termasuk mouse yang disimulasikan software yang dibuat oleh VirtualMouseInput—menjadi peristiwa layar sentuh yang disimulasikan.
  • Aliran data yang dihasilkan: Interaksi stik dan tombol gamepad Anda mendorong mouse virtual, yang TouchSimulation kemudian diterjemahkan menjadi peristiwa sentuhan tunggal (Touchscreen). Skrip deteksi sentuhan yang ada dapat memproses peristiwa ini dengan lancar tanpa modifikasi kode.
  • Pertimbangan: TouchSimulation terbatas pada emulasi pointer sentuhan tunggal. Jika gameplay Anda mengandalkan gestur multi-sentuh yang kompleks seperti cubit untuk memperbesar atau rotasi dua jari, Anda harus mengonfigurasi pengikatan tindakan input khusus untuk kontrol gamepad Anda.

Untuk mengetahui detail teknis, properti, dan dokumentasi penggunaan lengkap, lihat referensi skrip UnityEngine.InputSystem.UI.VirtualMouseInput dan UnityEngine.InputSystem.EnhancedTouch.TouchSimulation resmi.