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 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 Mixed Reality Toolkit, namespace harus dimulai dengan Microsoft.MixedReality.Toolkit (misalnya: Microsoft.MixedReality.Toolkit.WindowsMixedReality) dan kode harus terletak di folder di bawah MRTK/Providers (misalnya: MRTK/Providers/WindowsMixedReality).

Ruang nama

Penyedia data diharuskan memiliki namespace 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".

Disarankan agar kode sumber untuk penyedia data diletakkan dalam hierarki folder seperti yang ditunjukkan pada gambar berikut.

Example folder structure

Di mana ContosoInput berisi implementasi penyedia data, folder Editor berisi pemeriksa (dan kode khusus 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 menerapkan 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 di 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 oleh WindowsMixedRealityDeviceManager untuk menunjukkan bahwa ia memberikan dukungan untuk serangkaian kemampuan input, khususnya; tangan artikulasi, tangan suara tatapan 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 spesifik 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 (mis: 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 set pemetaan interaksi yang didukung oleh pengontrol. Untuk perangkat yang menerima data mereka melalui kelas Input Unity, alat pemetaan pengontrol adalah sumber daya yang bermanfaat 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 menaikkan 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 yang harus di akun aplikasi. 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 toolkit Mixed Reality, 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 Services/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

Toolkit Mixed Reality menggunakan file definisi assembly (.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 rakitan 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.

Registered input system data providers

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.

Lihat juga