Bagikan melalui


Interactables — MRTK3

MRTK dibangun berdasarkan XRBaseInteractable yang disediakan oleh Unity XR Interaction Toolkit. Perilaku dan API yang dapat berinteraksi yang ada didukung penuh di MRTK, dan semua interaktif 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 interaktif yang disertakan dalam XRI, MRTK menawarkan dua kelas dasar di mana interaksi canggih dapat dibangun, satu memperluas yang lain.

Diagram pewarisan yang dapat berinteraksi

  • MRTKBaseInteractable : XRBaseInteractable
    • Kelas ini menawarkan pemfilteran dan penandaan untuk berbagai jenis interaksi. Meskipun XRI XRBaseInteractable dasar tidak membeda-bedakan antara jenis interaksi, MRTKBaseInteractable menyediakan fungsi kenyamanan untuk memeriksa apakah jenis interaksi umum terjadi. Properti kenyamanan seperti IsGazeHovered atau IsGrabSelected adalah pintasan untuk mengkueri apakah interaksi yang berpartisipasi mengimplementasikan antarmuka tertentu (sesuai, IGazeInteractor atau IGrabInteractor). Bendera ini lebih berkinerja daripada iterasi melalui daftar interactorsHovering atau interactorsSelecting. Selain itu, MRTKBaseInteractable dapat memfilter/menolak jenis interaksi tertentu jika pengembang ingin mengecualikan modalitas input tertentu.
  • StatefulInteractable : MRTKBaseInteractable
    • Saat MRTKBaseInteractable menambahkan bendera dan filter, dan menghindari penambahan status tambahan ke yang dapat berinteraksi, StatefulInteractable memperkenalkan fitur stateful yang berguna seperti beralih dan pemilihan variabel.

Pemisahan status dan visual yang ketat

Dalam MRTK 2.x, interactable sering bertanggung jawab untuk mendorong 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 dengan visual. Jika Anda mendesain ulang visual atau menggunakan ukuran/bentuk/perpindahan yang berbeda/dll. tombol , skrip interaksi itu sendiri harus berubah.

Di MRTK3, interaktif adalah status dan interaksi murni. Yang dapat berinteraksi tidak merender perubahan atau efek visual berdasarkan status internalnya. Ini murni kumpulan logika status dan interaksi yang sangat portabel di antara penyiapan presentasi visual.

Isolasi ketat status dan visual

Skrip yang sama PressableButton dapat digunakan untuk membangun bola lincah, bidang "trackpad" seperti yang dapat ditekan, atau tekan abstrak yang mengeluarkan peristiwa jaringan saat ditekan. PressableButton Skrip bahkan tidak peduli "di mana" itu; itu bisa berada di dalam Kanvas, atau pada orang 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 untuk 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

StatefulInteractableFitur tambahan yang paling berguna melalui fungsionalitas XRI dasar adalah dukungan untuk variabel Selectedness. Meskipun XRI dasar dapat berinteraksi dipilih atau tidak dipilih, MRTK StatefulInteractabledapat berupa pecahan floating-point yang dipilih.

Konsep ini berguna ketika bekerja di XR, karena hampir semua bentuk input tidak lagi menjadi status biner. Pengontrol gerakan sering memiliki pemicu analog (atau cengkeraman analog!), interaksi tangan dapat memberikan variabel "terjepit", dan interaksi tekan 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 pada Terpilihnya keseluruhan interaksi. Terutama, semua interaksi yang mengimplementasikan IVariableSelectInteractor menyumbangkan jumlah pemilihan analog mereka, biasanya melalui semua interaksi yang max() 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 mengimplementasikan IPokeInteractor dapat berkontribusi Keterseleksian berdasarkan lokasi fisik mereka dan bagaimana mereka secara fisik menekan pada yang dapat berinteraksi. Kelas turunan lainnya dapat memperkenalkan bentuk seleksi arbitrer lainnya.

Keseleksian variabel

Untuk MRTK yang dapat berinteraksi menyediakan, Selectedness() dan isSelected akan selalu "setuju"--dengan kata lain, Anda tidak akan pernah mengamati Selectedness() yang lebih besar dari SelectThreshold tanpa XRI isSelected yang sesuai dan interaksi yang menyertainya di interactorsSelecting.

Penting

Subkelas yang dapat berinteraksi kustom Anda jelas dapat menimpa Selectedness 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 interaktor.

Saat Anda membuat interaktif kustom yang mendukung metode baru untuk menentukan Selectedness(), cukup ambil alih metode dan gabungkan pilihan baru Anda dengan jumlah pilihan yang ada. Jika Anda menggunakan StateVisualizer atau lapisan visual lain yang mendengarkan pilihan 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.

Alur adaptor UGUI

CanvasProxyInteractor Ketika diberi tahu tentang peristiwa UGUI oleh UGUIInputAdapter, itu mengeluarkan tindakan XRI yang setara pada yang relevan dapat berinteraksi. Pemetaan antara input UGUI dan tindakan XRI agak rugi dan merupakan area pengembangan aktif.

Dengan sistem ini, XRI interactable yang ada 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.