Penemuan waktu dan aktivasi subsistem
XR SDK

SDK Subsistem masukan

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.

Membuat penyedia Input XR dasar

Untuk membuat penyedia Input XR dasar, ikuti langkah-langkah ini:

  1. Melaporkan koneksi dan pemutusan perangkat Anda
  2. Isi semua informasi definisi perangkat yang terhubung
  3. Memperbarui keadaan perangkat setiap permintaan Unity ini
  4. Menjawab semua peristiwa dan pertanyaan yang relevan
  5. Melaporkan tata letak perangkat Anda ke sistem input baru

Terms

Panduan ini menggunakan ketentuan berikut:

Devices

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.

Feature

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

Usage

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.

UnityXRInternalInputDeviceId

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.

Koneksi perangkat dan pemutusan

Dua API pada IUnityXRInputInterface menangani koneksi perangkat dan pemutusan:

IUnityXRInputInterface.InputSubsystem_DeviceConnected

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.

IUnityXRInputInterface.InputSubsystem_DeviceDisconnected

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

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:

Pengaturan mengidentifikasi informasi

Pengembang menggunakan beberapa data pada perangkat untuk mengidentifikasi perangkat spesifik atau fungsi umum dari perangkat yang terhubung baru.

IUnityXRInputInterface.DeviceDefinition_SetName

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.

IUnityXRInputInterface.DeviceDefinition_SetCharacteristik

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.

IUnityXRInputInterface.DeviceDefinition_SetPro

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.

IUnityXRInputInterface.DeviceDefinition_SetSerialNumber

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.

Menambahkan fitur

Anda dapat menambahkan Fitur Input ke definisi perangkat Anda melalui panggilan API berikut.

IUnityXRInputInterface.DeviceDefinition_AddFitur

Ini menambahkan fitur tipe set (kecuali kUnityXRInputFeatureTypeCustom), dan mengembalikan UnityXRInputFeatureIndex dari fitur baru itu.

IUnityXRInputInterface.DeviceDefinition_AddCustomFeature

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.

IUnityXRInputInterface.DeviceDefinition_AddFeatureWithUsage

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.

IUnityXRInputInterface.DeviceDefinition_AddUsageAtIndex

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

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.

Jenis pembaruan state perangkat

Setelah definisi dinyatakan, perangkat permintaan Unity menyatakan dua kali bingkai melalui IUnityXRInputProvider.UpdateDeviceState. Parameter UnityXRInputUpdateType menentukan jenis pembaruan Unity mengharapkan:

  • kUnityXRInputUpdateTypeDynamic adalah pembaruan sebelum Unity iterates atas panggilan MonoBehaviour.Update dan kelanjutan koroutine. Ini harus mewakili di mana perangkat saat ini.
  • kUnityXRInputUpdateTypeBeforeRender disebut tepat sebelum Unity mempersiapkan untuk render ke headset, dan hanya sebelum Application.OnBeforeRender divoked. Panggilan ini harus menggunakan posisi pelacakan yang diprediksi maju, dan mewakili di mana Anda ingin membuat sceneAdegan berisi lingkungan dan menu permainan Anda. Pikirkan setiap file Adegan unik sebagai tingkat yang unik. Di setiap Adegan, Anda menempatkan lingkungan, hambatan, dan dekorasi, pada dasarnya merancang dan membangun permainan Anda dalam potongan-potongan. More info
    Lihat di Glossary
    pada waktu yang dibutuhkan untuk menampilkannya.

Metode keadaan perangkat

Parameter UnityXRInputDeviceState bertindak sebagai pegangan yang dapat dilewatkan ke metode apa pun yang ditetapkan dengan DeviceState pada IUnityXRInputInterface.

IUnityXRInputInterface.DeviceState_SetCustomValue

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.

IUnityXRInputInterface.DeviceState_SetBinaryValue

Ini menetapkan fitur boolean (on / off) tipe kUnityXRInputFeatureTypeBinary. Secara default, memulihkan, atau keadaan tidak digunakan dari fitur ini harus salah.

IUnityXRInputInterface.DeviceState_SetDiscreteStateValue

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.

IUnityXRInputInterface.DeviceState_SetAxis1DValue

Ini menetapkan nilai titik mengambang 32-bit. Nilai default, tidak digunakan harus 0,0.

IUnityXRInputInterface.DeviceState_SetAxis2DValue

Ini menetapkan nilai tipe UnityXRVector2. Struktur UnityXRVector2 adalah sepasang (X, Y) 32-bit mengapung. Nilai default, tidak digunakan harus (0.0, 0,0).

IUnityXRInputInterface.DeviceState_SetAxis3DValue

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).

IUnityXRInputInterface.DeviceState_SetRotationValue

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.

IUnityXRInputInterface.DeviceState_SetBoneValue

Ini menetapkan nilai tipe UnityXRBone.

IUnityXRInputInterface.DeviceState_SetHandValue

Ini menetapkan nilai tipe UnityXRHand.

IUnityXRInputInterface.DeviceState_SetEyesValue

Ini menetapkan nilai tipe UnityXREyes.

Sitemap Note: dilewatkan adalah yang sama kembali ketika menambahkan fitur individual ke definisi perangkat saat mengisi UnityXRInputFeatureUsageIndex.UnityXRInputFeatureDefinition.

Struktur

Jenis canggih berikut adalah jenis fitur khusus yang digunakan untuk mengandung data dari beberapa sumber data.

UnityXRBone

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.

UnityXRHand

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.

UnityXREyes

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].

Penanganan acara

Di luar keadaan perangkat dan definisi memperbarui, Unity mengharapkan Anda untuk bereaksi dan menanggapi berbagai peristiwa.

Photogallery

Login Login Sitemap

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.

Peristiwa asal pelacakan

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.

UnityXRInputProvider.HandleRecenter

Ketika mode asal pelacakan diatur ke kUnityXRInputTrackingOriginModeDevice, panggilan ke terbaru harus mengatur lokasi saat ini perangkat primer menjadi asal baru.

WordPress.org

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.

WordPress.org

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.

UnityXRInputProvider.HandleSetTrackingOriginMode

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.

IUnityXRInputInterface.InputSubsystem_TrackingOriginDiperbarui

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.

IUnityXRInputInterface.InputSubsystem_SetTrackingBoundary

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.

Photogallery

WordPress.org

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.

UnityXRInputProvider.HandleHapticImpulse

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.

UnityXRInputProvider.HandleHapticBuffer

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.

UnityXRInputProvider.HandleHapticStop

Ini adalah permintaan dari Unity untuk efek haptik untuk berhenti. Ini harus menghentikan efek haptik impulse atau buffered pada UnityXRInternalInputDeviceId yang disediakan.

Fitur Penggunaan

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:

Pose and tracking

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.

Informasi perangkat

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.

2D g

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.

1D Axes

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.

Binary

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.

Berbasis Sensor

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.

Tata letak perangkat sistem input baru

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 tata letak perangkat

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");            
        }

Daftarkan tata letak Anda

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>")
            );


Daftar untuk membuat penyedia input Anda sendiri

  • Mengatur pendaftaran siklus hidup dasar:
    • IUnityXRInputInterface.RegisterLifecycleProvider dengan pointer fungsi untuk Initialize, Start, Stop, Shutdown.
    • IUnityXRInputInterface.RegisterInputProvider disebut dari callback UnityLifecycleProvider.Initialize dengan panggilan Penyedia Input yang diisi.
  • Call IUnityXRInputInterface.InputSubsystem_DeviceConnected dengan unik Id untuk setiap perangkat yang terhubung.
  • Mengisi definisi perangkat yang valid untuk setiap perangkat dalam UnityXRInputProvider.FillDeviceDefinition:
    • Tambahkan nama yang valid.
    • Tambahkan peran yang valid.
    • Tambahkan setidaknya satu Fitur Input.
  • Memperbarui keadaan perangkat pada UnityXRInputProvider.UpdateDeviceState untuk setiap perangkat yang terhubung.
    • Jika Anda dapat maju memprediksi posisi pelacakan untuk rendering, lakukan ketika pembaruan adalah tipe kUnityXRInputUpdateTypeBeforeRender.
  • Call IUnityXRInputInterface.InputSubsystem_SetBoundaryPoints dengan kotak yang terikat.
  • Menerapkan UnityXRInputProvider.QueryTrackingOriginMode, UnityXRInputProvider.QuerySupportedTrackingOriginModes, dan UnityXRInputProvider.HandleSetTrackingOriginMode.
  • Implement UnityXRInputProvider.TryRecenter.
  • Menyediakan tata letak perangkat Sistem Input baru untuk perangkat Anda.
Penemuan waktu dan aktivasi subsistem
XR SDK