Sottosistemi - MRTK3

MRTK3 sfrutta l'infrastruttura di gestione del sottosistema XR unity per la scrittura di moduli estendibili che consentono di fornire supporto multipiattaforma per funzionalità come il riconoscimento vocale e il rilevamento della mano. Questi sottosistemi vengono inizializzati e caricati da Unity insieme ai sottosistemi nativi di Unity esistenti, ad esempio XRMeshSubsystem e XRInputSubsystem. Per informazioni sul funzionamento dei sottosistemi Unity, vedere la documentazione.

Filosofia

In MRTK v2 i "servizi" fornivano gran parte delle funzionalità nella scena stessa. Crea un'istanza di oggetti, sposta gli oggetti, aggiorna la gerarchia della scena e così via. In MRTK3 i sottosistemi non modificano in modo esplicito la scena. I sottosistemi MRTK3 sono provider modulari di dati, informazioni o eventi oppure eseguono calcoli per gli utenti finali. Se qualcosa nella scena deve cambiare o agire in base all'input dei dati, deve essere presente un componente visualizzatore basato su scena separato per agire sui dati. Questa suddivisione garantisce che i sottosistemi siano non distruttivi in relazione alle modifiche della scena e non causi effetti collaterali correlati alla scena.

Anche se MRTK v2 usava liberamente sistemi e servizi per l'elaborazione dell'input, MRTK3 usa in genere OpenXR e il sistema di input Unity per l'input multipiattaforma. Tuttavia, alcuni tipi di dati non sono ancora inclusi nel sistema di input. In questi casi vengono fornite interfacce multipiattaforma tramite i sottosistemi.

Ciclo di vita del sottosistema MRTK

Le definizioni del sottosistema incluse nell'infrastruttura di Unity offrono metodi semplici relativi al ciclo di vita, ad esempio Start, Stope Destroy. Questa definizione viene estesa in modo da includere metodi "tick" utili, ad esempio Update, LateUpdatee FixedUpdate. I MRTKLifecycleManager sottosistemi che implementano l'interfaccia del ciclo di vita. Questo gestore del ciclo di vita è l'unico MonoBehaviour coinvolto nell'architettura del sottosistema; questo può essere posizionato ovunque nella scena, ma tendiamo a lasciarlo da qualche parte sul Rig.

Query

L'esecuzione di query per un'implementazione del sottosistema è semplice ed efficiente.

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

Descrittori

Diverse implementazioni di un sottosistema possono avere funzionalità diverse. Ad esempio, le diverse implementazioni di possono specificare la funzionalità per la creazione di HandsSubsystem report di dati fisici o dati sintetizzati. Queste informazioni sulle funzionalità vengono archiviate nel descrittore del sottosistema e possono essere sottoposte a query per qualsiasi implementazione specificata.

// 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;
}

Profiles

Non da confondere con i profili di MRTK 2.x, i profili del sottosistema MRTK3 sono un asset per ogni piattaforma di distribuzione che definisce quali sottosistemi vengono creati e avviati.

Subsystem profiles, as shown in the MRTK project settings view.

I sottosistemi con la casella di controllo corrispondente verranno creati e avviati da e avranno i relativi metodi relativi al MRTKLifecycleManager ciclo di vita chiamati. È possibile assegnare profili diversi a destinazioni di distribuzione diverse.

I sottosistemi illustrati di seguito sono determinati dai pacchetti installati. Se un pacchetto non è installato, i sottosistemi associati a tale pacchetto non verranno visualizzati qui e l'elenco viene aggiornato automaticamente.

È disponibile un prodotto MRTKProfile predefinito come parte del pacchetto MRTK v3. Si tratta di un asset non modificabile. Tuttavia, se si vuole creare una selezione personalizzata di sottosistemi da eseguire, è necessario creare l'asset MRTKProfile all'interno del progetto.

Create your own MRTK subsystems

Configurazione

Ai sottosistemi possono essere assegnati oggetti di configurazione per personalizzare il comportamento.

Configuring a subsystem

Questi oggetti di configurazione sono accessibili da qualsiasi posizione tramite l'API XRSubsystemHelpers .

XRSubsystemHelpers.GetConfiguration<TConfig, TSubsystem>()

I sottosistemi definiscono il tipo di configurazione pertinente per tali sottosistemi nel relativo MRTKSubsystemAttribute. Oltre a questo, l'attributo definisce anche diversi metadati, insieme ai tipi concreti del provider implementato. Ad esempio, si tratta dell'attributo usato dal sottosistema di aggregator delle mani MRTK.

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

Come per i profili, vengono forniti gli asset di configurazione predefiniti. Non sono modificabili e devono essere duplicati nel progetto da modificare. È anche possibile creare un nuovo asset tramite il menu di creazione degli asset.

New asset creation menu