Sottosistemi - MRTK3

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

Filosofia

In MRTK v2 "services" ha fornito gran parte della funzionalità nella scena stessa. Avrebbero creato un'istanza di oggetti, spostano oggetti intorno, aggiornano 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 o eseguono il calcolo per gli utenti finali. Se una scena deve cambiare o agire in base all'input dei dati, è necessario che sia presente un componente visualizzatore basato su scena separato per agire sui dati. Questa suddivisione garantisce che i sottosistemi siano non distruttivi rispetto alle modifiche della scena e non causano effetti collaterali correlati alla scena.

Sebbene MRTK v2 usasse sistemi e servizi in modo liberale 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 stati inseriti 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 di ciclo di vita semplici come Start, Stope Destroy. Questa definizione è estesa per includere metodi "tick" utili, ad esempio Update, LateUpdatee FixedUpdate. I MRTKLifecycleManager sottosistemi gestiti 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 si tende a lasciarlo da qualche parte sul Rig.

Query

L'esecuzione di query per un'implementazione del sottosistema è semplice e 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 dell'oggetto HandsSubsystem possono specificare la loro funzionalità per la creazione di report di dati fisici o dati sintetizzati. Queste informazioni sulla funzionalità vengono archiviate nel descrittore del sottosistema e possono essere eseguite 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 confondere con i profili di MRTK 2.x, i profili del sottosistema MRTK3 sono un asset della piattaforma per distribuzione che definisce i sottosistemi creati e avviati.

Profili del sottosistema, come illustrato nella visualizzazione impostazioni del progetto MRTK.

I sottosistemi che hanno la casella di controllo corrispondente verranno creati e avviati da MRTKLifecycleManager e hanno i relativi metodi relativi al 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 aggiorna automaticamente.

Nel pacchetto MRTK v3 è disponibile un pre-prodotto MRTKProfile . È 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.

Creare sottosistemi MRTK personalizzati

Configurazione

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

Configurazione di un sottosistema

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

XRSubsystemHelpers.GetConfiguration<TConfig, TSubsystem>()

I sottosistemi definiscono quale tipo di configurazione è rilevante per loro nel relativo MRTKSubsystemAttribute. Oltre a questo, l'attributo definisce anche diverse parti di metadati, insieme ai tipi concreti del provider implementato. Si tratta, ad esempio, dell'attributo usato dal sottosistema di aggregazione 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. Sono non modificabili e devono essere duplicati nel progetto da modificare. È anche possibile creare un nuovo asset tramite il menu di creazione dell'asset.

Nuovo menu di creazione di asset