Interactables — MRTK3
MRTK dibangun berdasarkan yang XRBaseInteractable
disediakan oleh Unity's XR Interaction Toolkit. Perilaku dan API yang dapat berinteraksi yang ada didukung penuh di MRTK, dan semua kemampuan berinteraksi kustom kami mematuhi API XRI yang dapat berinteraksi yang ada.
Untuk pengembang yang baru menggunakan XRI, kami sangat menyarankan Agar Anda terlebih dahulu meninjau dokumentasi arsitektur XRI Unity.
Untuk memperluas mekanisme yang dapat berinteraksi yang termasuk dalam XRI, MRTK menawarkan dua kelas dasar di mana interaksi canggih dapat dibangun, satu memperluas yang lain.
MRTKBaseInteractable : XRBaseInteractable
- Kelas ini menawarkan pemfilteran dan penandaan untuk berbagai jenis interaksi. Meskipun XRI
XRBaseInteractable
dasar tidak mendiskriminasi antara jenis interaktor,MRTKBaseInteractable
menyediakan fungsi kenyamanan untuk memeriksa apakah jenis interaksi umum terjadi. Properti kenyamanan sepertiIsGazeHovered
atauIsGrabSelected
adalah pintasan untuk mengkueri apakah interaksi yang berpartisipasi mengimplementasikan antarmuka tertentu (secara sesuai,IGazeInteractor
atauIGrabInteractor
). Bendera ini lebih berkinerja daripada iterasi melalui daftarinteractorsHovering
atauinteractorsSelecting
. Selain itu,MRTKBaseInteractable
dapat memfilter/menolak jenis interaksi tertentu jika pengembang ingin mengecualikan modalitas input tertentu.
- Kelas ini menawarkan pemfilteran dan penandaan untuk berbagai jenis interaksi. Meskipun XRI
StatefulInteractable : MRTKBaseInteractable
- Saat
MRTKBaseInteractable
menambahkan bendera dan filter, dan menghindari penambahan status tambahan ke yang dapat berinteraksi,StatefulInteractable
memperkenalkan fitur stateful yang berguna seperti pengalih dan pemilihan variabel.
- Saat
Pemisahan status dan visual yang ketat
Dalam MRTK 2.x, dapat berinteraksi sering kali bertanggung jawab untuk mengendarai efek visual mereka sendiri, baik itu kompresi tombol 3D, efek hover, atau bahkan hanya mengubah warna pada satu klik. Batasan pendekatan ini adalah bahwa logika interaksi terikat erat ke visual. Jika Anda mendesain ulang visual atau menggunakan ukuran/bentuk/perpindahan/dll. tombol yang berbeda, skrip interaksi itu sendiri perlu diubah.
Di MRTK3, interaktif adalah keadaan dan interaksi murni. Yang dapat berinteraksi tidak merender perubahan atau efek visual berdasarkan status internalnya. Ini murni kumpulan status dan logika interaksi yang sangat portabel antara pengaturan presentasi visual.
Skrip yang sama PressableButton
dapat digunakan untuk membangun bola yang lincah, bidang "trackpad" seperti yang dapat ditekan, atau menekan abstrak yang mengeluarkan peristiwa jaringan saat ditekan. PressableButton
Skrip bahkan tidak peduli "di mana" itu; itu bisa berada di dalam Kanvas, atau pada yang kaku.
Untuk mendorong visual, "driver visual" terpisah digunakan untuk melakukan polling status dari yang dapat berinteraksi dan merender umpan balik yang sesuai. StateVisualizer
adalah metode kode rendah yang direkomendasikan untuk mendorong efek umpan balik visual umum dari status yang dapat berinteraksi, tetapi pengembang bebas menulis driver visual kustom mereka sendiri. Misalnya, komponen tombol kami umumnya digunakan StateVisualizer
untuk efek umpan balik berbasis 3D + shader tingkat lanjut, tetapi kami juga memberikan contoh BasicPressableButtonVisuals
yang menunjukkan bagaimana driver visual sederhana dapat ditulis dalam kode.
Pilihan variabel
StatefulInteractable
Fitur tambahan yang paling berguna melalui fungsionalitas XRI dasar adalah dukungan untuk variabel Selectedness
. Meskipun XRI dasar dapat berinteraksi dipilih atau tidak dipilih, MRTK StatefulInteractable
dapat menjadi pecahan titik mengambang yang dipilih.
Konsep ini berguna saat bekerja di XR, karena hampir semua bentuk input tidak lagi menjadi status biner. Pengontrol gerakan sering memiliki pemicu analog (atau genggaman analog!), interaksi tangan dapat memberikan variabel "terjepit", dan interaksi pers volumetrik dapat menekan tombol atau permukaan yang dapat didorong dengan jumlah yang bervariasi. Anda melihat variabel ini, interaksi analog di mana-mana di XR, dan MRTK dilengkapi untuk membantu pengembang membangun interaksi yang menyenangkan di atas input analog ini.
Berbagai interaktor dan jenis interaksi yang berbeda semuanya dapat berkontribusi bersama-sama pada Keseleksian keseluruhan yang dapat berinteraksi. Terutama, semua interaktor yang menerapkan IVariableSelectInteractor
berkontribusi jumlah pemilihan analog mereka, biasanya melalui max()
semua interaksi yang berpartisipasi. Jumlah variabel ini dikombinasikan dengan pilihan biner non-variabel yang berasal dari interaktor gaya vanili.
Untuk kelas turunan seperti PressableButton
, Selectedness()
fungsi ditimpa untuk menambahkan "bahan" tambahan ke komputasi keseleksian. Interaksi yang menerapkan IPokeInteractor
dapat berkontribusi Pilihan berdasarkan lokasi fisik mereka dan bagaimana mereka secara fisik menekan pada interaktif. Kelas turunan lainnya dapat memperkenalkan bentuk seleksi arbitrer lainnya.
Untuk MRTK yang dapat berinteraksi menyediakan, Selectedness()
dan isSelected
akan selalu "setuju"--dengan kata lain, Anda tidak akan pernah mengamati yang Selectedness()
lebih besar dari SelectThreshold
tanpa XRI isSelected
yang sesuai dan interaksi yang menyertainya di interactorsSelecting
.
Penting
Subkelas yang dapat berinteraksi kustom Anda jelas dapat mengambil alih Selectedness
ke beberapa nilai lain yang sepenuhnya terputus dari XRI isSelected
; namun, kemampuan berinteraksi kami tidak melakukan ini, dan kami sangat mencegahnya. Secara umum, jangan pernah menulis interaksi yang tidak memiliki interaksi yang sesuai. Pemilihan XRI akan, dalam sebagian besar kasus, cukup, dan interaksi kustom apa pun yang Anda bangun harus ditulis sebagai interaksi.
Saat Anda membuat interaktif kustom yang mendukung metode baru untuk menentukan Selectedness()
, cukup ganti metode dan gabungkan pilihan baru Anda dengan jumlah pilihan yang ada. Jika Anda menggunakan StateVisualizer
atau lapisan visual lain yang mendengarkan pemilihan variabel, itu akan merespons sesuai dengan jenis pilihan baru Anda.
Memetakan peristiwa UGUI ke XRI
Dalam beberapa kasus, diinginkan untuk memiliki interaktif merespons peristiwa UGUI, seperti mouse, gamepad, atau input layar sentuh. UGUIInputAdapter
, yang merupakan UGUI Selectable
, menerima peristiwa UGUI dan meneruskannya ke CanvasProxyInteractor
, jika ada.
CanvasProxyInteractor
Ketika diberi tahu tentang peristiwa UGUI oleh UGUIInputAdapter
, ini mengeluarkan tindakan XRI yang setara pada yang relevan yang dapat berinteraksi. Pemetaan antara input UGUI dan tindakan XRI agak rugi dan merupakan area pengembangan aktif.
Dengan sistem ini, XRI yang ada dapat berinteraksi yang dibangun untuk platform imersif, tangan, pengontrol gerakan, dan input 3D dapat bereaksi sama baiknya dengan kontrol 2D yang dapat diakses seperti mouse dan gamepad.