Membuat penyedia data sistem input — MRTK2
Sistem input Mixed Reality Toolkit adalah sistem yang dapat diperluas untuk mengaktifkan dukungan perangkat input. Untuk menambahkan dukungan untuk platform perangkat keras baru, penyedia data input kustom mungkin diperlukan.
Artikel ini menjelaskan cara membuat penyedia data kustom, juga disebut manajer perangkat, untuk sistem input. Contoh kode yang ditunjukkan di sini adalah dari WindowsMixedRealityDeviceManager
.
Kode lengkap yang digunakan dalam contoh ini dapat ditemukan di folder MRTK/Providers/WindowsMixedReality.
Struktur namespace layanan dan folder
Penyedia data dapat didistribusikan sebagai add-on pihak ketiga atau sebagai bagian dari Microsoft Mixed Reality Toolkit. Proses persetujuan untuk pengiriman penyedia data baru ke MRTK akan bervariasi berdasarkan kasus per kasus dan akan dikomunikasikan pada saat proposal awal.
Penting
Jika penyedia data sistem input dikirimkan ke repositori toolkit Mixed Reality, namespace harus dimulai dengan Microsoft.MixedReality.Toolkit (mis: Microsoft.MixedReality.Toolkit.WindowsMixedReality) dan kode harus terletak di folder di bawah MRTK/Providers (mis: MRTK/Providers/WindowsMixedReality).
Ruang nama
Penyedia data diharuskan memiliki namespace layanan untuk mengurangi potensi tabrakan nama. Disarankan agar namespace menyertakan komponen berikut.
- Nama perusahaan
- Area fitur
Misalnya, penyedia data input yang dibuat oleh perusahaan Contoso mungkin adalah "Contoso.MixedReality.Toolkit.Input".
Struktur folder yang direkomendasikan
Disarankan agar kode sumber untuk penyedia data ditata dalam hierarki folder seperti yang ditunjukkan pada gambar berikut.
Di mana ContosoInput berisi implementasi penyedia data, folder Editor berisi pemeriksa (dan kode spesifik editor Unity lainnya), folder Textures berisi gambar pengontrol yang didukung, dan Profil berisi satu atau beberapa profil yang telah dibuat sebelumnya.
Catatan
Beberapa gambar pengontrol umum dapat ditemukan di folder MixedRealityToolkit\StandardAssets\Textures.
Menerapkan penyedia data
Tentukan pewarisan kelas antarmuka dan/atau dasar
Semua penyedia data sistem input harus mengimplementasikan IMixedRealityInputDeviceManager
antarmuka, yang menentukan fungsionalitas minimum yang diperlukan oleh sistem input. Fondasi MRTK mencakup BaseInputDeviceManager
kelas yang menyediakan implementasi default dari fungsionalitas yang diperlukan ini. Untuk perangkat yang dibangun pada kelas UInput Unity, UnityJoystickManager
kelas dapat digunakan sebagai kelas dasar.
Catatan
Kelas BaseInputDeviceManager
dan UnityJoystickManager
menyediakan implementasi yang diperlukan IMixedRealityInputDeviceManager
.
public class WindowsMixedRealityDeviceManager :
BaseInputDeviceManager,
IMixedRealityCapabilityCheck
{ }
IMixedRealityCapabilityCheck
digunakan olehWindowsMixedRealityDeviceManager
untuk menunjukkan bahwa ia memberikan dukungan untuk serangkaian kemampuan input, khususnya; tangan artikulasi, tangan suara tatapan-gerakan dan pengontrol gerakan.
Menerapkan atribut MixedRealityDataProvider
Langkah utama membuat penyedia data sistem input adalah menerapkan MixedRealityDataProvider
atribut ke kelas . Langkah ini memungkinkan pengaturan profil dan platform default untuk penyedia, ketika dipilih di profil sistem input.
[MixedRealityDataProvider(
typeof(IMixedRealityInputSystem),
SupportedPlatforms.WindowsUniversal,
"Windows Mixed Reality Device Manager")]
public class WindowsMixedRealityDeviceManager :
BaseInputDeviceManager,
IMixedRealityCapabilityCheck
{ }
Menerapkan metode IMixedRealityDataProvider
Setelah kelas ditentukan, langkah selanjutnya adalah menyediakan implementasi IMixedRealityDataProvider
antarmuka.
Catatan
Kelas BaseInputDeviceManager
, melalui BaseService
kelas , hanya menyediakan implementasi kosong untuk IMixedRealityDataProvider
metode . Detail metode ini umumnya khusus untuk penyedia data.
Metode yang harus diimplementasikan oleh penyedia data adalah:
Destroy()
Disable()
Enable()
Initialize()
Reset()
Update()
Menerapkan logika penyedia data
Langkah selanjutnya adalah menambahkan logika untuk mengelola perangkat input, termasuk pengontrol apa pun yang akan didukung.
Menerapkan kelas pengontrol
Contoh WindowsMixedRealityDeviceManager
mendefinisikan dan mengimplementasikan kelas pengontrol berikut.
Kode sumber untuk setiap kelas ini dapat ditemukan di folder MRTK/Providers/WindowsMixedReality.
- WindowsMixedRealityArticulatedHand.cs
- WindowsMixedRealityController.cs
- WindowsMixedRealityGGVHand.cs
Catatan
Tidak semua manajer perangkat akan mendukung beberapa jenis pengontrol.
Menerapkan atribut MixedRealityController
Selanjutnya, terapkan MixedRealityController
atribut ke kelas . Atribut ini menentukan jenis pengontrol (misalnya: tangan artikulasi), handedness (misalnya: kiri atau kanan) dan gambar pengontrol opsional.
[MixedRealityController(
SupportedControllerType.WindowsMixedReality,
new[] { Handedness.Left, Handedness.Right },
"StandardAssets/Textures/MotionController")]
{ }
Mengonfigurasi pemetaan interaksi
Langkah selanjutnya adalah menentukan serangkaian pemetaan interaksi yang didukung oleh pengontrol. Untuk perangkat yang menerima data mereka melalui kelas Input Unity, alat pemetaan pengontrol adalah sumber daya yang berguna untuk mengonfirmasi sumbu dan pemetaan tombol yang benar untuk ditetapkan ke interaksi.
Contoh berikut disingkat dari GenericOpenVRController
kelas , yang terletak di folder MRTK/Providers/OpenVR.
public override MixedRealityInteractionMapping[] DefaultLeftHandedInteractions => new[]
{
// Controller Pose
new MixedRealityInteractionMapping(0, "Spatial Pointer", AxisType.SixDof, DeviceInputType.SpatialPointer, MixedRealityInputAction.None),
// Left Trigger Squeeze
new MixedRealityInteractionMapping(1, "Trigger Position", AxisType.SingleAxis, DeviceInputType.Trigger, ControllerMappingLibrary.AXIS_9),
// Left Trigger Press (Select)
new MixedRealityInteractionMapping(2, "Trigger Press (Select)", AxisType.Digital, DeviceInputType.TriggerPress, KeyCode.JoystickButton14),
};
Catatan
Kelas menyediakan ControllerMappingLibrary
konstanta simbolis untuk sumbu input Unity dan definisi tombol.
Menaikkan peristiwa pemberitahuan
Untuk memungkinkan aplikasi merespons input dari pengguna, penyedia data meningkatkan peristiwa pemberitahuan yang sesuai dengan perubahan status pengontrol seperti yang IMixedRealityInputHandler
didefinisikan dalam antarmuka dan IMixedRealityInputHandler<T>
.
Untuk kontrol jenis digital (tombol), naikkan peristiwa OnInputDown dan OnInputUp.
// inputAction is the input event that is to be raised.
if (interactionSourceState.touchpadPressed)
{
InputSystem?.RaiseOnInputDown(InputSource, ControllerHandedness, inputAction);
}
else
{
InputSystem?.RaiseOnInputUp(InputSource, ControllerHandedness, inputAction);
}
Untuk kontrol analog (misalnya: posisi touchpad) peristiwa InputChanged harus dinaikkan.
InputSystem?.RaisePositionInputChanged(InputSource, ControllerHandedness, interactionMapping.MixedRealityInputAction, interactionSourceState.touchpadPosition);
Menambahkan instrumentasi Unity Profiler
Performa sangat penting dalam aplikasi realitas campuran. Setiap komponen menambahkan beberapa jumlah overhead untuk aplikasi mana yang harus memperhitungkan. Untuk akhir ini, penting bahwa semua penyedia data input berisi instrumentasi Unity Profiler dalam perulangan dalam dan jalur kode yang sering digunakan.
Disarankan untuk menerapkan pola yang digunakan oleh MRTK saat melengkapi penyedia kustom.
private static readonly ProfilerMarker GetOrAddControllerPerfMarker = new ProfilerMarker("[MRTK] WindowsMixedRealityDeviceManager.GetOrAddController");
private async void GetOrAddController(InteractionSourceState interactionSourceState)
{
using (GetOrAddControllerPerfMarker.Auto())
{
// Code to be measured.
}
}
Catatan
Nama yang digunakan untuk mengidentifikasi penanda profiler bersifat arbitrer. MRTK menggunakan pola berikut.
"[product] className.methodName - catatan opsional"
Disarankan agar penyedia data kustom mengikuti pola serupa untuk membantu menyederhanakan identifikasi komponen dan metode tertentu saat menganalisis jejak.
Membuat profil dan inspektur
Di Mixed Reality Toolkit, penyedia data dikonfigurasi menggunakan profil.
Penyedia data dengan opsi konfigurasi tambahan (misalnya: InputSimulationService) harus membuat profil dan inspektur untuk memungkinkan pelanggan memodifikasi perilaku agar paling sesuai dengan kebutuhan aplikasi.
Kode lengkap untuk contoh di bagian ini dapat ditemukan di MRTK. Folder Layanan/InputSimulation.
Tentukan profil
Konten profil harus mencerminkan properti pengamat yang dapat diakses (misalnya: interval pembaruan). Semua properti yang dapat dikonfigurasi pengguna yang ditentukan di setiap antarmuka harus dimuat dengan profil.
[CreateAssetMenu(
menuName = "Mixed Reality Toolkit/Profiles/Mixed Reality Simulated Input Profile",
fileName = "MixedRealityInputSimulationProfile",
order = (int)CreateProfileMenuItemIndices.InputSimulation)]
public class MixedRealityInputSimulationProfile : BaseMixedRealityProfile
{ }
Atribut CreateAssetMenu
dapat diterapkan ke kelas profil untuk memungkinkan pelanggan membuat instans > profil menggunakan menu Buat > Aset Mixed Reality Profil Toolkit>.
Mengimplementasikan inspektur
Pemeriksa profil adalah antarmuka pengguna untuk mengonfigurasi dan melihat konten profil. Setiap pemeriksa profil harus memperluas kelas 'BaseMixedRealityToolkitConfigurationProfileInspector .
[CustomEditor(typeof(MixedRealityInputSimulationProfile))]
public class MixedRealityInputSimulationProfileInspector : BaseMixedRealityToolkitConfigurationProfileInspector
{ }
Atribut CustomEditor
ini memberi tahu Unity jenis aset yang diterapkan inspektur.
Membuat definisi perakitan
Mixed Reality Toolkit menggunakan file assembly definition (.asmdef) untuk menentukan dependensi antar komponen serta untuk membantu Unity dalam mengurangi waktu kompilasi.
Disarankan agar file definisi perakitan dibuat untuk semua penyedia data dan komponen editornya.
Menggunakan struktur folder dalam contoh sebelumnya, akan ada dua file .asmdef untuk penyedia data ContosoInput.
Definisi perakitan pertama adalah untuk penyedia data. Untuk contoh ini, itu akan disebut ContosoInput dan akan terletak di folder ContosoInput contoh. Definisi perakitan ini harus menentukan dependensi pada Microsoft.MixedReality.Toolkit dan rakitan lainnya yang bergantung padanya.
Definisi assembly ContosoInputEditor akan menentukan pemeriksa profil dan kode khusus editor apa pun. File ini harus terletak di folder akar kode editor. Dalam contoh ini, file akan terletak di folder ContosoInput\Editor. Definisi perakitan ini akan berisi referensi ke rakitan ContosoInput serta:
- Microsoft.MixedReality.Toolkit
- Microsoft.MixedReality.Toolkit.Editor.Inspectors
- Microsoft.MixedReality.Toolkit.Editor.Utilities
Mendaftarkan penyedia data
Setelah dibuat, penyedia data dapat didaftarkan ke sistem input dan digunakan dalam aplikasi.
Pengemasan dan distribusi
Penyedia data yang didistribusikan sebagai komponen pihak ketiga memiliki detail spesifik kemasan dan distribusi yang tersisa ke preferensi pengembang. Kemungkinan, solusi yang paling umum adalah menghasilkan .unitypackage dan mendistribusikan melalui Unity Asset Store.
Jika penyedia data dikirimkan dan diterima sebagai bagian dari paket Microsoft Mixed Reality Toolkit, tim Microsoft MRTK akan mengemas dan mendistribusikannya sebagai bagian dari penawaran MRTK.