SDK XR Subsistem input adalah antarmuka untuk tombol pelaporan, sumbu, dan informasi perangkat pelacakan. Ini adalah subsistem inti untuk mendapatkan data yang dikendalikan pengguna ke berbagai titik input mesin Unity. Unity melaporkan informasi input Anda ke InputDevices dan Sistem Input tergantung pada jenis informasi yang tersedia.
Untuk membuat penyedia Input XR dasar, ikuti langkah-langkah ini:
Panduan ini menggunakan ketentuan berikut:
Kebanyakan API Subsystem Input bergantung pada perangkat. Perangkat adalah wadah fitur input yang dirujuk oleh ID unik yang Anda pilih. Ini bisa menjadi sesuatu yang beton, seperti gamepad atau headset, atau dapat mewakili benda abstrak seperti kerangka tangan terdeteksi. Perangkat memiliki sejumlah fitur tetap yang tidak dapat Anda ubah saat perangkat terhubung.
Fitur Input adalah apa pun yang dapat Anda dapatkan sensor atau data yang dimodifikasi pengguna. Itu bisa menjadi tombol, atau elemen pelacakan posisi, atau masa pakai baterai. Mereka dikelompokkan ke berbagai jenis data, diidentifikasi oleh UnityXRInputFeatureType. Ini adalah jenis data yang didukung saat ini yang dapat pada perangkat input:
UnityXRInputFeatureType | Data Type |
---|---|
kUnityXRInputFeatureTypeCustom | char[] (hingga 1024 elemen) |
kUnityXRInputFeatureTypeBinary | bool |
kUnityXRInputFeatureTypeDiscreteStates | unsigned int |
kUnityXRInputFiturTypeAxis1D | float |
kUnityXRInputFeatureTypeAxis2D | UnityXRVector2 |
kUnityXRInputFeatureTypeAxis3D | UnityXRVector3 |
kUnityXRInputFeatureTypeRotation | UnityXRVector4 |
kUnityXRInputFeatureTypeHand | UnityXRHand |
kUnityXRInputFeatureTypeBone | UnityXRBone |
kUnityXRInputFeatureTypeEyes | UnityXREyes |
Penggunaan memberikan konteks ke fitur. Ini mengidentifikasi bagaimana pengembang harus menggunakan fitur. Misalnya, fitur bisa menjadi sumbu 2D, tetapi penggunaannya memberi tahu pengembang itu touchpad. Penggunaan juga dapat menginformasikan pengembang bahwa fitur sumbu satu dimensi adalah pelaporan masa pakai baterai. Anda dapat membuat penggunaan Anda sendiri, tetapi Anda perlu menggunakan banyak penggunaan Unity-developed mungkin, karena mereka mengaktifkan utilitas lintas platform untuk pengembang. Untuk daftar penggunaan umum yang tersedia untuk semua, lihat bagian Penggunaan fitur di bawah ini.
Sitemap Mengidentifikasi semua perangkat. Pertimbangkan pengidentifikasi ini untuk menjadi ID unik yang baik Unity dan penyedia berbagi untuk referensi perangkat tertentu. Anda menentukan peta Ids mana ke perangkat mana, dengan satu-satunya batasan yang tidak dapat Anda gunakan Id yang sama untuk dua perangkat yang terhubung pada saat yang sama. Ketika Anda melaporkan secara spesifik Id sebagai penghubung, informasi permintaan Unity tentang apa perangkat yang mampu dan keadaan saat ini perangkat yang menggunakan Id, dan mengirim acara spesifik perangkat menggunakan Id.
Dua API pada IUnityXRInputInterface menangani koneksi perangkat dan pemutusan:
Ini melaporkan perangkat baru. UnityXRInternalInputDeviceId
penyedia pasokan dapat menjadi nilai apapun, selama itu mewakili perangkat unik internal dan tidak ada dua perangkat terhubung dengan Id yang sama dari penyedia yang sama. Perangkat hanya dapat dihubungkan antara peristiwa Start dan Stop siklus hidup penyedia masukan. Setiap perangkat yang sudah terhubung ketika IUnityXRInputProvider.Start disebut harus dilaporkan selama callback tersebut.
Setelah perangkat dilaporkan sebagai terhubung, Unity callIUnityXRInputProvider.FillDeviceDefinition pada loop pembaruan input berikutnya dengan UnityXRInternalInputDeviceId yang disediakan untuk mendapatkan informasi spesifik tentang perangkat tersebut.
Laporan ini bahwa perangkat input tidak lagi tersedia. Anda hanya dapat melaporkan perangkat input yang terputus setelah Anda telah melaporkannya seperti terhubung. Ketika Anda menerima IUnityXRInputProvider.Stop, Anda harus melaporkan semua perangkat input saat ini terhubung sebagai terputus.
Dua panggilan di atas adalah benang aman, dan dapat disebut setiap saat.
Definisi Perangkat menggambarkan fitur yang dapat dilaporkan perangkat Anda ke Unity. Fitur terdiri dari perangkat mengidentifikasi informasi, seperti nama perangkat, peran, produsen, dan nomor seri. Definisi Perangkat juga mengandung daftar yang diindeks semua fitur input individu yang tersedia.
Ketika perangkat dilaporkan sebagai terhubung, Unity memanggil penyedia Anda melalui IUnityXRInputProvider.FillDeviceDefinition. Parameter UnityXRInputDeviceDefinition bertindak sebagai pegangan yang dapat dilewatkan ke metode apa pun yang ditetapkan dengan DeviceDefinition pada IUnityXRInputInterface. Metode ini adalah sebagai berikut:
Pengembang menggunakan beberapa data pada perangkat untuk mengidentifikasi perangkat spesifik atau fungsi umum dari perangkat yang terhubung baru.
Ini memungkinkan penyedia untuk mengatur nama perangkat. Nama harus jelas, sejahtera, dan dikenali oleh konsumen pasar massa. Ini tidak boleh menyertakan nama produsen. Nama ini tersedia untuk pengembang melalui UnityEngine.XR.InputDevice.name dan sebagai InputDevice.product dalam Sistem Input. Jangan biarkan kosong ini.
Ini memungkinkan penyedia untuk menentukan jenis perangkat yang terhubung. UnityXRInputDeviceCharacteristics adalah serangkaian bendera yang membantu menentukan apa perangkat yang mampu. Perubahan penggunaan Sistem Input InputDevice.
Ini memungkinkan penyedia untuk mengatur produsen perangkat. Produsen harus jelas, menarik, dan dikenal kembali oleh konsumen pasar massal. string ini tersedia untuk pengembang melalui UnityEngine.XR.InputDevice.manufacturer dan sebagai InputDevice.manufacturer dalam Sistem Input. Jangan biarkan kosong ini.
Ini memungkinkan penyedia untuk mengatur jumlah serial perangkat. string ini tersedia untuk pengembang melalui UnityEngine.XR.InputDevice.serialNumber dan sebagai InputDevice.serialNumber dalam Sistem Input. Ini harus menjadi pengidentifikasi unik untuk perangkat spesifik ini, atau Anda harus meninggalkannya kosong.
Anda dapat menambahkan Fitur Input ke definisi perangkat Anda melalui panggilan API berikut.
Ini menambahkan fitur tipe set (kecuali kUnityXRInputFeatureTypeCustom), dan mengembalikan UnityXRInputFeatureIndex dari fitur baru itu.
Ini menambahkan fitur kUnityXRInputFeatureTypeCustom. Ini adalah penyangga variabel, hingga 1024 byte. Anda dapat menggunakan ini untuk membuat jenis kustom, tidak diketahui untuk Unity, dan membutuhkan ukuran eksplisit. Metode ini mengembalikan UnityXRInputFeatureIndex dari fitur baru itu.
Ini menambahkan fitur, tetapi juga mencakup satu penggunaan fitur. Metode ini adalah pembantu yang menggabungkan DeviceDefinition_AddFeature dan DeviceDefinition_AddUsageAtIndex, dan mengembalikan UnityXRInputFeatureIndex dari fitur baru itu.
Ini menambahkan penggunaan fitur ke fitur yang ada. Dibutuhkan UnityXRInputFeatureIndex dari salah satu metode yang menambahkan fitur. Anda dapat menambahkan banyak penggunaan ke fitur tunggal yang diperlukan.
Sitemap Nilai Note: yang dikembalikan adalah semua dalam urutan sequential yang ditambahkan.UnityXRInputFeatureIndex values are all in the sequential order they are added.
Negara perangkat adalah struktur data yang mengandung keadaan perangkat saat ini. Struktur UnityXRInputDeviceState dijelaskan oleh UnityXRInputDeviceDefinition.
Sitemap Fitur yang terkandung dalam Negara Perangkat diakses dengan Note: sebagaimana dilaporkan ketika menentukan fitur dalam definisi perangkat.UnityXRInputFeatureIndex as reported when declaring that feature in the device definition.
Setelah definisi dinyatakan, perangkat permintaan Unity menyatakan dua kali bingkai melalui IUnityXRInputProvider.UpdateDeviceState. Parameter UnityXRInputUpdateType menentukan jenis pembaruan Unity mengharapkan:
Parameter UnityXRInputDeviceState bertindak sebagai pegangan yang dapat dilewatkan ke metode apa pun yang ditetapkan dengan DeviceState pada IUnityXRInputInterface.
Ini menetapkan fitur tipe kUnityXRInputFeatureTypeCustom pada UnityXRInputFeatureIndex yang disediakan. Ketika mengatur fitur nilai kustom, penyedia harus selalu menetapkan nilai dengan ukuran penuh fitur yang dinyatakan; tidak ada pengaturan nilai parsial. Juga, Anda harus menyatakan semua fitur khusus untuk Unity selama pengiriman dengan penjelasan rinci tentang jenis data yang mereka miliki dan mengapa mereka tidak dapat ada menggunakan jenis fitur individu lainnya.
Ini menetapkan fitur boolean (on / off) tipe kUnityXRInputFeatureTypeBinary. Secara default, memulihkan, atau keadaan tidak digunakan dari fitur ini harus salah.
Ini menetapkan nilai integer 32-bit. Ini juga dapat digunakan untuk mewakili numerasi. Nilai default, tidak digunakan harus 0, dan jika digunakan untuk numerasi, 0 harus mewakili nilai null, tidak ada yang tidak ditentukan, atau tidak valid.
Ini menetapkan nilai titik mengambang 32-bit. Nilai default, tidak digunakan harus 0,0.
Ini menetapkan nilai tipe UnityXRVector2. Struktur UnityXRVector2 adalah sepasang (X, Y) 32-bit mengapung. Nilai default, tidak digunakan harus (0.0, 0,0).
Ini menetapkan nilai tipe UnityXRVector3. Struktur UnityXRVector2 adalah sepasang (X, Y, Z) 32-bit mengapung. Nilai default, tidak digunakan harus (0.0, 0,0, 0,0).
Ini menetapkan nilai tipe UnityXRVector4, diformat sebagai quaternion. Nilai default, tidak digunakan harus (0, 0, 0, 1). Lihat dokumentasi tentang quaternionsCara standar Unity mewakili rotasi sebagai data. Ketika menulis kode yang berhubungan dengan rotasi, Anda biasanya harus menggunakan kelas Quaternion dan metodenya. More info
Lihat di Glossary untuk informasi lebih lanjut.
Ini menetapkan nilai tipe UnityXRBone.
Ini menetapkan nilai tipe UnityXRHand.
Ini menetapkan nilai tipe UnityXREyes.
Sitemap Note: dilewatkan adalah yang sama kembali ketika menambahkan fitur individual ke definisi perangkat saat mengisi UnityXRInputFeatureUsageIndex.UnityXRInputFeatureDefinition.
Jenis canggih berikut adalah jenis fitur khusus yang digunakan untuk mengandung data dari beberapa sumber data.
Ini mewakili tulang atau satu elemen pose hirarkis di ruang. Anggota position mewakili posisi tiga dimensi dalam meter, menggunakan koordinat kiri di mana Y naik. Anggota rotation mewakili orientasi di ruang untuk tulang itu, diwakili oleh quaternion normal di radian. parentBoneIndex adalah UnityXRInputFeatureIndex yang harus menunjuk ke UnityXRBone yang ke atas dalam hirarki, atau kUnityInvalidXRInputFeatureIndex jika itu adalah akar untuk kerangka ini.
Ini mewakili struktur tulang seperti tangan. Mereka mengatur hirarki tulang ke jari dan akar untuk traversal mudah. rootBoneIndex harus selalu menunjuk indeks yang valid yaitu tipe kUnityXRInputFeatureTypeBone, yang mewakili telapak tangan atau pusat tangan. fingerBoneIndices harus ditumpuk seperti dimensi pertama atau peta array ke jari individu, berikut nilai numerasi UnityXRHandFinger, dan dimensi kedua array adalah tulang jari individu dari akar ke ujung.
Ini mewakili sepasang mata, titik fiksasi mereka, dan data blink saat ini. leftEyePose dan rightEyePose adalah tipe UnityXRPose, di mana anggota position mewakili posisi tiga dimensi dalam meter, menggunakan koordinat tangan kiri, di mana Y naik, dan anggota rotation mewakili quaternion ternormalisasi dalam radian. fixationPoint mewakili di mana cembung mata kiri dan kanan, dan juga posisi tiga dimensi dalam meter, menggunakan koordinat tangan kiri, di mana Y naik. leftOpenAmount dan rightOpenAmount mewakili keterbukaan mata, di mana 0 ditutup, dan 1 sepenuhnya terbuka. Mereka tidak bisa melebihi kisaran [0,1].
Di luar keadaan perangkat dan definisi memperbarui, Unity mengharapkan Anda untuk bereaksi dan menanggapi berbagai peristiwa.
Ini adalah untuk acara pribadi, khusus untuk penyedia ini. Parameter eventType adalah kode kustom yang digunakan untuk mengidentifikasi payload. Jika penyedia tidak mengerti bahwa acara, itu harus kembali kUnitySubsystemErrorCodeFailure.
Asal pelacakan mengacu pada titik di ruang dunia nyata yang dilacak perangkat relatif. Secara efektif titik di ruang dunia nyata di mana perangkat akan melaporkan posisi (0, 0, 0). Unity mendukung berbagai mode asal pelacakan, dan penyedia dapat memilih untuk memilih kepada mereka yang mereka dukungan. Modus asal pelacakan tercantum di bawah UnityXRInputTrackingOriginModeFlags.
kUnityXRInputTrackingOriginModeDevice menempatkan asal di lokasi perangkat utama dan yaw pada saat startup, atau di lokasi acara UnityXRInputProvider.HandleRecenter terakhir.
kUnityXRInputTrackingOriginModeFloor menempatkan asal di suatu tempat di lantai. Lokasi di lantai hingga penyedia, selama memungkinkan pengembang memahami perbedaan ketinggian antara lantai dan berbagai perangkat.
kUnityXRInputTrackingOriginModeTrackingReference menempatkan asal di lokasi tertentu InputDevice dengan karakteristik kUnityXRInputDeviceCharacteristicsTrackingReference.
Akhirnya, kUnityXRInputTrackingOriginModeUnknown adalah kasus kesalahan, dan tidak boleh dikembalikan oleh penyedia.
Ketika mode asal pelacakan diatur ke kUnityXRInputTrackingOriginModeDevice, panggilan ke terbaru harus mengatur lokasi saat ini perangkat primer menjadi asal baru.
Ini adalah permintaan dari Unity untuk mendapatkan mode asal pelacakan saat ini yang penyedia digunakan. Penyedia diharapkan untuk mengatur parameter trackingOriginMode dan mengembalikan kUnitySubsystemErrorCodeSuccess. Parameter yang dikembalikan hanya harus menjadi nilai bendera tunggal.
Ini adalah permintaan untuk mode asal pelacakan mana yang didukung. Penyedia diharapkan untuk mengatur parameter supportedTrackingOriginModes dan mengembalikan kUnitySubsystemErrorCodeSuccess. Parameter yang dikembalikan harus menjadi daftar kumulatif dari semua UnityXRInputTrackingOriginModeFlags yang UnityXRInputProvider.HandleSetTrackingOriginMode mampu mendukung.
Ini adalah permintaan dari Unity untuk mengubah mode asal pelacakan saat ini. Parameter trackingOriginMode adalah mode asal pelacakan yang diinginkan. Penyedia diharapkan mengembalikan kUnitySubsystemErrorCodeSuccess jika asal dapat diubah, dan kUnitySubsystemErrorCodeSuccess sebaliknya. Jika mode asal pelacakan sudah mode yang diinginkan, penyedia harus melakukan apa-apa dan mengembalikan kUnitySubsystemErrorCodeSuccess.
Ini adalah acara penyedia dapat mengirim bahwa memberitahukan Unity bahwa lokasi asal pelacakan telah berubah. Ini harus disebut ketika UnityXRInputProvider.HandleSetTrackingOriginMode berhasil dan memindahkan asal. Ini juga dapat disebut jika penyedia harus mengubah asal karena perubahan informasi pelacakan secara keseluruhan.
Ini adalah peristiwa penyedia dapat mengirim bahwa memberitahukan Unity bahwa ada batas pelacakan yang tersedia, atau bahwa batas pelacakan telah berubah. Ini harus disebut jika ada batas, dan asal pelacakan telah berubah seperti itu telah memindahkan posisi relatif dari batas. Ini dapat disebut dengan null, dan 0 poin untuk menghapus batas pelacakan yang ada.
Ini adalah permintaan untuk kemampuan yang lebih menguntungkan dari perangkat yang diberikan penyedia mengisi. Pengaturan supportsImpulse untuk benar memungkinkan peristiwa untuk UnityXRInputProvider.HandleHapticImpulse. Pengaturan supportsBuffer untuk benar memungkinkan peristiwa untuk UnityXRInputProvider.HandleHapticBuffer.
Sitemap Struktur kemampuan memungkinkan penyedia untuk mengatur jumlah saluran dan permintaan untuk memulai dan menghentikan haptik yang mengandung indeks saluran. Ini memungkinkan penyedia untuk memiliki beberapa motor di dalam satu perangkat yang dapat hancur secara independen. Saluran pertama harus menjadi motor yang paling umum untuk digunakan, tetapi pemesanan berikutnya adalah ketergantungan penyedia.Note: The capabilities structure allows the provider to set the number of channels and requests to start and stop haptics containing a channel index. This allows the provider to have multiple motors inside of a single device that can be rumbled independently. The first channel should be the most common motor to use, but subsequent ordering is provider-dependent.
Ini adalah permintaan untuk perangkat untuk hancur pada amplitudo set, untuk durasi yang ditetapkan. Isi Unity dalam data untuk permintaan ini. Parameter penyangga adalah tipe UnityXRHapticImpulse.
Ini adalah permintaan untuk perangkat untuk menghancurkan pola, mengingat penyangga set. Isi Unity dalam data untuk permintaan ini. Parameter penyangga adalah tipe UnityXRHapticUpdate.
The bufferSize tidak pernah lebih dari UnityXRHapticCapabilities.bufferMaxSize kembali dari peristiwa UnityXRInputProvider.QueryHapticCapabilities.
Ini adalah permintaan dari Unity untuk efek haptik untuk berhenti. Ini harus menghentikan efek haptik impulse atau buffered pada UnityXRInternalInputDeviceId yang disediakan.
Penggunaan fitur adalah tag string sederhana yang memberikan konteks tentang fitur Anda dan membantu pengembang Unity mengakses perangkat Anda dengan cara generik. Anda dapat menyatakan perangkat Anda sebagai pemicu, posisi perangkat, tombol menu, atau konsep berbagi fitur input lainnya. Pengembang dapat mengakses ini dan berinteraksi dengan perangkat Anda tanpa tahu persis apa itu. Ini juga digunakan untuk rute input data menjadi UnityEngine.Input dan UnityEngine.XR.InputTracking dan memutuskan indeks. Fitur input tunggal dapat memiliki beberapa penggunaan, tetapi setiap fitur input yang Anda deklarasikan harus memiliki setidaknya satu penggunaan yang ditetapkan. Jika Anda memilih untuk tidak menggunakan penggunaan Unity menyediakan secara default, Anda harus membiarkan Unity tahu apa yang telah Anda gunakan ketika mengajukan sertifikasi, dan bersiap untuk memperbarui string penggunaan Anda berdasarkan umpan balik Unity.
Semua penggunaan ruang dunia dalam meter, m / s, m / s2, atau radian di mana tepat. Ruang harus diorientasikan sebagai kiri, z-forward, y-up. Asal ruang harus menjadi posisi perangkat pada koneksi. Ruang ini Anda sendiri, dan tidak memetakan langsung ke ruang dunia Unity.
Ini adalah penggunaan umum yang tersedia dalam Unity:
Fitur berikut adalah untuk perangkat yang memasok pelacakan di dunia nyata. Mereka berguna untuk mengidentifikasi kemampuan pelacakan saat ini:
kUnityXRInputFeatureUsageIsTracked adalah boolean yang menentukan apakah perangkat saat ini melacak dengan benar. Benar berarti sepenuhnya dilacak, palsu berarti sebagian atau tidak dilacak.
kUnityXRInputFeatureUsageTrackingState adalah fitur state diskrit, didukung oleh numerasi UnityXRInputTrackingStateFlags, yang mengidentifikasi fitur pelacakan aktual yang saat ini tersedia dan memperbarui. Nilai ini tidak boleh di atas kUnityXRInputTrackingStateAll.
Pelacakan yang tersisa fitur relay data individu tentang 'nodes' tertentu, seperti perangkat, mata kiri, atau cameraKomponen yang menciptakan gambar sudut pandang tertentu di tempat kejadian Anda. Output ditarik ke layar atau ditangkap sebagai tekstur. More info
Lihat di Glossary warna. Mereka dikelompokkan menjadi set enam, tergantung pada jenis data. Ini harus diperbarui bersama dengan nilai saat ini di kUnityXRInputFeatureUsageTrackingState. Itu, jika keadaan pelacakan mengatakan posisi tersedia, semua penggunaan posisi harus memperbarui dengan benar.
Perbaikan penggunaan adalah sebagai berikut:
Prefix | Description |
---|---|
kUnityXRInputFeatureUsageDevice | Posisi umum perangkat input |
kUnityXRInputFeatureUsageCenterEye | Rata-rata terpusat dari semua lokasi rendering mata |
kUnityXRInputFeatureUsageLeftEye | Lokasi rendering untuk mata kiri |
kUnityXRInputFeatureUsageRightEye | Lokasi rendering untuk mata yang tepat |
kUnityXRInputFeatureUsageColorCamera | Lokasi pakan kamera masuk |
Masing-masing prefiks memiliki serangkaian suffix yang tersedia yang mewakili berbagai atribut pelacakan, dan adalah sebagai berikut: * Position * Rotation * Velocity * AngularVelocity * Acceleration * AngularAcceleration%
Tidak termasuk ini dalam definisi berarti mereka tidak pernah tersedia. Termasuk mereka, tetapi menandai mereka tidak tersedia melalui fitur kUnityXRInputFeatureUsageTrackingState, berarti bahwa fitur tidak tersedia saat ini, tetapi bisa tersedia nanti.
Ini mengandung informasi perangkat umum daripada kontrol yang digerakkan pengguna. Mereka adalah fitur perangkat yang pengguna tidak memiliki kontrol langsung.
kUnityXRInputFeatureUsageBatteryLevel adalah fitur sumbu 1D yang mewakili tingkat baterai saat ini perangkat, di mana 0 tidak ada baterai, dan 1 sepenuhnya ditagih. Itu harus selalu berada dalam kisaran [0–1].
kUnityXRInputFeatureUsageUserPresence adalah boolean yang kembali benar ketika pengguna saat ini memakai headset.
Ini adalah nilai float analog dua dimensi, seperti touchpads dan joysticks. Kontrol ini biasanya dipindahkan dengan thumb. Mereka menyediakan X dan Y, dan harus selalu berada di kisaran ([–1,1],[–1,1]).
kUnityXRInputFeatureUsagePrimary2DAxis adalah fitur sumbu 2D yang mewakili touchpad atau joystick. 0,0 adalah posisi idle dan Y-positive jauh dari pengguna pengontrol.
kUnityXRInputFeatureUsageSecondary2DAxis adalah sumbu 2D yang mewakili joystick atau touchpad kedua, digunakan selain kUnityXRInputFeatureUsagePrimary2DAxis. 0,0 adalah posisi idle dan Y-positive jauh dari pengguna pengontrol.
Ini adalah semua nilai float analog satu dimensi. Tombol, pemicu, dan kontrol lainnya yang dapat 'half ditekan' diidentifikasi di sini.
kUnityXRInputFeatureUsageTrigger adalah sumbu 1D yang peta ke pemicu yang digerakkan oleh indeks. Ini harus selalu berada dalam kisaran [0,1] di mana 0 terbuka dan 1 sepenuhnya direcangkan. Jika ini diterapkan, perangkat juga harus menerapkan kUnityXRInputFeatureUsageTriggerButton.
kUnityXRInputFeatureUsageGrip adalah sumbu 1D yang peta ke pegangan aktif pemerasan tangan. Ini harus selalu berada dalam kisaran [0,1] di mana 0 terbuka dan 1 sepenuhnya direcangkan. Jika ini diterapkan, perangkat juga harus menerapkan kUnityXRInputFeatureUsageGripButton.
Ini adalah nilai digital satu dimensi,. Mereka dapat diubah atau tidak, tetapi tidak ada granularitas lebih lanjut.
kUnityXRInputFeatureUsagePrimaryButton adalah fitur biner yang mewakili tombol utama pada pengontrol. Ini biasanya akan digunakan sebagai tombol penerimaan atau muka di menu. Jika ini digerakkan, maka kUnityXRInputFeatureUsagePrimaryTouch harus digerakkan juga, jika ada.
kUnityXRInputFeatureUsagePrimaryTouch adalah fitur biner yang mewakili keadaan sentuh tombol utama pada pengontrol. Jika ini diterapkan, perangkat harus menerapkan kUnityXRInputFeatureUsagePrimaryButton.
kUnityXRInputFeatureUsageSecondaryButton adalah fitur biner yang mewakili tombol sekunder pada pengontrol. Ini biasanya akan digunakan sebagai tombol belakang atau alternatif. Jika ini digerakkan, maka kUnityXRInputFeatureUsageSecondaryTouch harus diubah juga jika ada.
kUnityXRInputFeatureUsageSecondaryTouch adalah fitur biner yang mewakili keadaan sentuh tombol sekunder pada pengontrol. Jika ini diterapkan, perangkat harus menerapkan kUnityXRInputFeatureUsageSecondaryButton.
kUnityXRInputFeatureUsageGripButton adalah fitur biner yang mewakili apakah wajah yang digerakkan tangan dipicu. Jika ini diterapkan, perangkat juga harus menerapkan kUnityXRInputFeatureUsageGrip.
kUnityXRInputFeatureUsageTriggerButton adalah fitur boolean yang mewakili apakah pemerasan yang digerakkan tangan dipicu. Jika ini diterapkan, perangkat juga harus menerapkan kUnityXRInputFeatureUsageTrigger.
kUnityXRInputFeatureUsageMenuButton adalah fitur biner yang mewakili jeda non-gameplay atau tombol menu. Ini biasanya tidak dalam jangkauan mudah untuk pengguna.
kUnityXRInputFeatureUsagePrimary2DAxisClick adalah fitur biner yang mewakili depresi atau klik sumbu kUnityXRInputFeatureUsagePrimary2DAxis 2D. Jika ini diterapkan, perangkat harus menerapkan kUnityXRInputFeatureUsagePrimary2DAxis. Jika ini digerakkan, maka kUnityXRInputFeatureUsagePrimary2DAxisTouch harus digerakkan juga, jika ada.
kUnityXRInputFeatureUsagePrimary2DAxisTouch adalah fitur biner yang mewakili sentuhan cahaya sumbu 2D kUnityXRInputFeatureUsagePrimary2DAxis. Jika ini diterapkan, perangkat harus menerapkan kUnityXRInputFeatureUsagePrimary2DAxis.
kUnityXRInputFeatureUsageSecondary2DAxisClick adalah fitur biner yang mewakili depresi atau klik sumbu kUnityXRInputFeatureUsageSecondary2DAxis 2D. Jika ini diterapkan, perangkat harus menerapkan kUnityXRInputFeatureUsageSecondary2DAxis. Jika ini digerakkan, maka kUnityXRInputFeatureUsageSecondary2DAxisTouch harus digerakkan juga, jika ada.
kUnityXRInputFeatureUsageSecondary2DAxisTouch adalah fitur biner yang mewakili sentuhan cahaya sumbu 2D kUnityXRInputFeatureUsageSecondary2DAxis. Jika ini diterapkan, perangkat harus menerapkan kUnityXRInputFeatureUsageSecondary2DAxis.
Ini mewakili jenis sensor individu. Mereka digunakan untuk mencari data jenis tangan dan mata.
kUnityXRInputFeatureUsageHandData adalah fitur UnityXRHands yang mewakili data pelacakan tangan. kUnityXRInputFeatureUsageEyesData adalah fitur UnityXREyes yang mewakili data pelacakan mata.
Untuk mengaktifkan pengguna untuk mengikat dan menggunakan kode untuk mengakses properti perangkat Anda ketika menggunakan Sistem Input baru, Anda perlu menyediakan deskripsi tata letak perangkat sebagai bagian dari penyedia input Anda.
Anda harus menyediakan tata letak perangkat untuk setiap jenis perangkat yang Anda tentukan dalam penyedia masukan. Jika Anda tidak menyediakan tata letak perangkat eksplisit untuk perangkat yang Anda register, pengguna tidak akan dapat menggunakan Sistem Input baru UI(User Interface) Memungkinkan pengguna untuk berinteraksi dengan aplikasi Anda. Unity saat ini mendukung tiga sistem UI. More info
Lihat di Glossary untuk mengikat fitur pada perangkat Anda. Sistem Input masih akan menerima data perangkat, dan pengguna akan dapat secara manual membuat mengikat fitur perangkat baru Anda.
Untuk informasi lebih lanjut tentang tata letak perangkat Sistem Input, lihat Sistem Input. Contoh disediakan di bawah ini untuk kemudahan implementasi.
Contoh ini menyediakan tata letak untuk Pengontrol VR Contoh baru. Definisi tata letak XRSDK Controller Contoh digambarkan sebagai memiliki: - Sebuah kUnityXRInputFeatureTypeBinary
tambahan yang disebut exampleButton
- Nilai kUnityXRInputFeatureTypeAxis3D
yang disebut examplePosition
- Nilai kUnityXRInputFeatureTypeRotation
yang disebut exampleRotation
Untuk memungkinkan pengguna untuk mengikat dan mengontrol perangkat menggunakan Sistem Input baru, Anda harus menyediakan tata letak perangkat untuk Pengontrol VR Contoh baru Anda.
Pertama, Anda perlu memberikan atribut InputControlLayout
, dan juga menyediakan nama eksplisit untuk digunakan dengan UI Sistem Input Baru. Gunakan atribut [Preseve]
untuk memastikan bahwa elemen-elemen ini tidak dilucuti dari langkah kompilasi.
[Preserve]
[InputControlLayout(displayName = "Example VR Controller")]
public class ExampleVRController : XRController
{
Selanjutnya, berikan pemetaan InputControl
untuk berbagai elemen yang didefinisikan dalam Tata Letak XRSDK. Gunakan [Preserve]
lagi untuk memastikan bahwa elemen-elemen ini tidak dilucuti dari build. Penggunaan kata kunci aliases
memungkinkan Sistem Input baru untuk melakukan pencocokan umum berdasarkan alias yang Anda berikan.
[Preserve]
[InputControl(aliases = new[] { "PrimaryButton" })]
public ButtonControl exampleButton { get; private set; }
[Preserve]
[InputControl]
public Vector3Control examplePosition { get; private set; }
[Preserve]
[InputControl]
public QuaternionControl exampleRotation { get; private set; }
Akhirnya, memberikan implementasi metode FinishSetup
yang mengikat pemetaan kontrol pada contoh kontrol. Pastikan Anda juga memanggil kelas dasar FinishSetup
, jika tidak kontrol dasar tidak terikat.
protected override void FinishSetup()
{
base.FinishSetup();
exampleButton = GetChildControl<ButtonControl>("exampleButton");
examplePosition = GetChildControl<Vector3Control>("examplePosition");
exampleRotation = GetChildControl<QuaternionControl>("exampleRotation");
}
Langkah terakhir yang perlu Anda lakukan adalah untuk mendaftarkan tata letak perangkat baru dengan Sistem Input Baru ketika Anda memulai Loader XRSDK untuk perangkat ini. Kode berikut adalah contoh implementasi ini.
Anda harus mengisi bagian REGEX THAT MATCHES YOUR DEVICE
dengan string pencocokan yang benar ke produk, atau string lain yang disediakan oleh Penyedia Input XRSDK Anda ketika perangkat terhubung.
public override bool Initialize()
{
#if UNITY_INPUT_SYSTEM
InputLayoutLoader.RegisterInputLayouts();
#endif
#if UNITY_INPUT_SYSTEM
#if UNITY_EDITOR
[InitializeOnLoad]
#endif
static class InputLayoutLoader
{
static InputLayoutLoader()
{
RegisterInputLayouts();
}
public static void RegisterInputLayouts()
{
UnityEngine.InputSystem.InputSystem.RegisterLayout<ExampleVRController>(
matches: new InputDeviceMatcher()
.WithInterface(XRUtilities.InterfaceMatchAnyVersion)
.WithProduct("<REGEX THAT MATCHES YOUR DEVICE>")
);