Subsistem — MRTK3

MRTK3 memanfaatkan infrastruktur Unity XR Subsystem Management untuk menulis modul yang dapat diperluas yang dapat membantu memberikan dukungan lintas platform untuk fitur seperti pelacakan ucapan dan tangan. Subsistem ini diinisialisasi dan dimuat oleh Unity bersama subsistem asli Unity yang ada seperti XRMeshSubsystem dan XRInputSubsystem. Lihat dokumentasi tentang cara kerja subsistem Unity.

Filsafat

Dalam MRTK v2, "layanan" menyediakan banyak fungsionalitas dalam adegan itu sendiri. Mereka akan membuat instans objek, memindahkan objek, memperbarui hierarki adegan, dll. Di MRTK3, subsistem tidak secara eksplisit memodifikasi adegan. Subsistem MRTK3 adalah penyedia data, informasi, atau peristiwa modular atau melakukan komputasi untuk pengguna akhir. Jika sesuatu dalam adegan harus berubah atau ditindaklanjuti berdasarkan input data, harus ada komponen visualizer berbasis adegan terpisah untuk bertindak pada data. Pemisahan ini memastikan bahwa subsistem tidak merusak mengenai perubahan adegan dan tidak menyebabkan efek samping terkait adegan.

Sementara MRTK v2 menggunakan sistem dan layanan secara liberal untuk memproses input, MRTK3 umumnya menggunakan OpenXR dan Unity Input System untuk input lintas platform. Namun, beberapa jenis data belum dibungkus oleh Sistem Input. Dalam kasus ini, kami menyediakan antarmuka lintas platform melalui subsistem kami.

Siklus hidup subsistem MRTK

Definisi subsistem yang disertakan dengan infrastruktur Unity menawarkan metode siklus hidup sederhana seperti Start, , Stopdan Destroy. Kami memperluas definisi ini untuk menyertakan metode "tick" yang bermanfaat, seperti Update, LateUpdate, dan FixedUpdate. Kami MRTKLifecycleManager mengelola subsistem yang mengimplementasikan antarmuka siklus hidup kami. Pengelola siklus hidup ini adalah satu-satunya MonoBehaviour yang terlibat dalam arsitektur subsistem; ini dapat ditempatkan di mana saja di tempat kejadian, tetapi kita cenderung meninggalkannya di suatu tempat di Rig.

Melakukan Permintaan

Mengkueri implementasi subsistem sangat mudah dan berkinerja.

// Gets the first valid implementation of T that is started and running.
T mySubsystem = XRSubsystemHelpers.GetFirstRunningSubsystem<T>();

// Gets the first valid implementation of T, even if it hasn't been started.
T mySubsystem = XRSubsystemHelpers.GetFirstSubsystem<T>();

// If multiple implementations of T are loaded, get all of them.
List<T> allOfThem = new List<T>();
GetAllRunningSubsystemsNonAlloc<T>(allOfThem);

Deskriptor

Implementasi subsistem yang berbeda dapat memiliki kemampuan yang berbeda. Misalnya, berbagai implementasi HandsSubsystem dapat menentukan kemampuannya untuk melaporkan data fisik atau data yang disintesis. Informasi kemampuan ini disimpan dalam pendeskripsi subsistem, dan dapat dikueri untuk implementasi tertentu.

// Get the first running hands subsystem.
var handsSubsystem = XRSubsystemHelpers.GetFirstRunningSubsystem<HandsSubsystem>();

// If we found one...
if (handsSubsystem != null)
{
    // Read the capability information off the implementation's descriptor.
    bool isPhysicalData = handsSubsystem.subsystemDescriptor.IsPhysicalData;
}

Profil

Tidak bingung dengan profil MRTK 2.x, profil subsistem MRTK3 adalah aset per platform penyebaran yang menentukan subsistem mana yang dibuat dan dimulai.

Profil subsistem, seperti yang ditunjukkan dalam tampilan pengaturan proyek MRTK.

Subsistem yang memiliki kotak centang terkait akan dibuat dan dimulai oleh MRTKLifecycleManager dan meminta metode siklus hidup mereka dipanggil. Profil yang berbeda dapat ditetapkan ke target penyebaran yang berbeda.

Subsistem yang ditampilkan di sini ditentukan oleh paket mana yang telah Anda instal. Jika paket tidak diinstal, subsistem yang terkait dengan paket tersebut tidak akan ditampilkan di sini, dan daftar di-refresh secara otomatis.

Ada pra-dibuat MRTKProfile yang disediakan sebagai bagian dari paket MRTK v3. Ini adalah aset yang tidak dapat diubah. Namun, jika Anda ingin membuat pilihan kustom subsistem untuk dijalankan, Anda harus membuat aset dalam MRTKProfile proyek Anda.

Membuat subsistem MRTK Anda sendiri

Konfigurasi

Subsistem dapat ditetapkan objek konfigurasi untuk menyesuaikan perilakunya.

Mengonfigurasi subsistem

Objek konfigurasi ini dapat diakses dari mana saja melalui XRSubsystemHelpers API.

XRSubsystemHelpers.GetConfiguration<TConfig, TSubsystem>()

Subsistem menentukan jenis konfigurasi mana yang relevan dengannya di MRTKSubsystemAttribute. Seiring dengan ini, atribut juga mendefinisikan beberapa bagian metadata, bersama dengan jenis beton penyedia yang diimplementasikan. Misalnya, ini adalah atribut yang digunakan Subsistem Agregator Tangan MRTK.

[MRTKSubsystem(
        Name = "com.microsoft.mixedreality.hands",
        DisplayName = "MRTK Hands Aggregator Subsystem",
        Author = "Microsoft",
        ProviderType = typeof(MRTKAggregator),
        SubsystemTypeOverride = typeof(MRTKHandsAggregatorSubsystem),
        ConfigType = typeof(MRTKHandsAggregatorConfig))]

Seperti halnya Profil, aset Konfigurasi default disediakan. Mereka tidak dapat diubah dan harus diduplikasi ke proyek Anda untuk diedit. Anda juga dapat membuat aset baru melalui menu pembuatan aset.

Menu pembuatan aset baru