Interazioni : MRTK3

MRTK si basa sul XRBaseInteractable toolkit di interazione XR di Unity. Il comportamento e l'API interagibili esistenti sono completamente supportati in MRTK e tutti i nostri interazionebili personalizzati obbediscono all'API XRI interagiscibile esistente.

Per gli sviluppatori nuovi a XRI, è consigliabile esaminare prima la documentazione dell'architettura XRI di Unity.

Per espandere i meccanismi interagisci inclusi in XRI, MRTK offre due classi di base su cui è possibile creare interazioni avanzate, una estende l'altra.

Diagramma di ereditarietà interagisci

  • MRTKBaseInteractable : XRBaseInteractable
    • Questa classe offre filtri e contrassegni per diversi tipi di interazione. Anche se la base XRI XRBaseInteractable non discrimina tra i tipi di interazione, MRTKBaseInteractable offre funzioni di praticità per verificare se si verificano tipi comuni di interazioni. Proprietà di praticità come IsGazeHovered o IsGrabSelected sono tasti di scelta rapida per eseguire query su se un interagisce partecipante implementa un'interfaccia specificata (corrispondentemente IGazeInteractor o IGrabInteractor). Questi flag sono più efficienti rispetto all'iterazione tramite l'elenco di interactorsHovering o interactorsSelecting. Inoltre, MRTKBaseInteractable può filtrare/rifiutare determinati tipi di interagiscitori nel caso in cui lo sviluppatore desideri escludere determinate modalità di input.
  • StatefulInteractable : MRTKBaseInteractable
    • Mentre MRTKBaseInteractable aggiunge flag e filtri ed evita l'aggiunta di qualsiasi stato aggiuntivo all'interazione, StatefulInteractable introduce funzionalità utili come attivare e selezionare variabili.

Separazione rigorosa dello stato e degli oggetti visivi

In MRTK 2.x, gli interagisci sono spesso responsabili della guida dei propri effetti visivi, come la compressione di un pulsante 3D, un effetto del puntatore del mouse o anche solo la modifica del colore su un clic. La limitazione di questo approccio è che la logica di interazione è strettamente associata agli oggetti visivi. Se si desidera riprogettare gli oggetti visivi o usare un'altra dimensione/forma/spostamento/ecc. di pulsante, è necessario modificare lo script di interazione stesso.

In MRTK3, gli interazionebili sono uno stato puro e l'interazione. L'interazione non esegue il rendering di modifiche o effetti visivi in base allo stato interno. È puramente una raccolta di logica di stato e interazione che è altamente portabile tra le configurazioni della presentazione visiva.

Isolamento rigoroso degli stati e degli oggetti visivi

Lo stesso PressableButton script può essere usato per creare una palla squishy, un piano "trackpad" pressabile o un piano astrattamente pressabile che genera eventi di rete sulla stampa. Lo PressableButton script non importa nemmeno "dove" è; potrebbe essere all'interno di un canvas o su un oggetto rigido.

Per guidare gli oggetti visivi, viene usato un "driver visivo separato" per eseguire il polling dello stato dall'oggetto interagiscibile e eseguire il rendering del feedback appropriato. StateVisualizer è il metodo consigliato a basso codice per guidare gli effetti di feedback visivi comuni dallo stato interagiscibile, ma gli sviluppatori sono liberi di scrivere i propri driver visivi personalizzati. Ad esempio, i componenti del pulsante usano StateVisualizer in genere per i relativi effetti di feedback avanzati basati su 3D + shader, ma vengono forniti anche un esempio BasicPressableButtonVisuals che illustra come è possibile creare un semplice driver visivo nel codice.

selezione di variabili

StatefulInteractableLa funzionalità aggiuntiva più utile della funzionalità XRI di base è supportata per la variabile Selectedness. Mentre le interfacce XRI di base sono selezionate o meno, mrTK StatefulInteractablepuò essere una frazione a virgola mobile selezionata.

Questo concetto è utile quando si lavora in XR, poiché quasi tutte le forme di input non sono più stati binari. I controller di movimento hanno spesso trigger analogici (o grip analogici!), le interazioni con la mano possono fornire una variabile "pizzicamento", e le interazioni di pressione volumetrica possono deprimere un pulsante o una superficie spingebile in base a una quantità variabile. Queste interazioni analogiche vengono visualizzate ovunque in XR e MRTK sono dotate per aiutare gli sviluppatori a creare interazioni deliziose in cima a questi input analogici.

Un'ampia gamma di diversi interazionetori e tipi di interazioni può contribuire insieme alla selezione complessiva di un'interazione. In particolare, tutti gli interagitori che implementano IVariableSelectInteractor contribuiscono alla loro quantità di selezione analogica, in genere attraverso uno max() di tutti gli interatori partecipanti. Questa quantità di variabile viene combinata con le selezioni binarie e non variabili provenienti da interagitori in stile vaniglia.

Per le classi derivate come PressableButton, la Selectedness() funzione viene sottoposto a override per aggiungere un ulteriore "ingrediente" al calcolo della selezione. Gli interagitori che implementano IPokeInteractor possono contribuire alla selezione in base alla loro posizione fisica e al modo in cui stanno premendo fisicamente sull'interazione. Altre classi derivate possono introdurre altre forme arbitrarie di selezione.

Selezione variabile

Per l'interazione mrTK fornisce, e isSelected sempre "accetta"--in altre parole, non si osserverà mai un Selectedness() valore maggiore di quello SelectThreshold senza un XRI isSelected corrispondente e un interagitore di accompagnamento in interactorsSelecting. Selectedness()

Importante

Le sottoclassi interagibili personalizzate possono ovviamente eseguire l'override di un altro valore completamente Selectedness disconnesso dalla XRI isSelected; tuttavia, le nostre interazioni non fanno questa operazione e lo sconsigliamo fortemente. In generale, non scrivere mai interazioni che non hanno un interagitore corrispondente. La selezione XRI, nella maggior parte dei casi, sarà sufficiente e tutte le interazioni personalizzate che si compilano devono essere scritte come interagisci.

Quando si crea un'interazione personalizzata che supporta un nuovo metodo per determinare Selectedness(), è sufficiente eseguire l'override del metodo e combinare la nuova selezione con la quantità di selezione esistente. Se si usa StateVisualizer o qualsiasi altro livello visivo in ascolto della selezione delle variabili, risponderà di conseguenza al nuovo tipo di selezione.

Eseguire il mapping degli eventi UGUI a XRI

In alcuni casi, è consigliabile avere interazioni con eventi UGUI, ad esempio mouse, gamepad o input touchscreen. L'oggetto UGUIInputAdapter, che è un oggetto UGUI , riceve gli eventi UGUI Selectablee li inoltra a , CanvasProxyInteractorse presente.

Flusso dell'adattatore UGUI

Quando l'oggetto CanvasProxyInteractor riceve una notifica degli eventi UGUI da parte di UGUIInputAdapter, genera azioni XRI equivalenti sull'interazione pertinente. Il mapping tra l'input UGUI e le azioni XRI è leggermente perdente ed è un'area di sviluppo attivo.

Con questo sistema, i sistemi XRI esistenti interagiscono per piattaforme immersive, mani, controller di movimento e input 3D possono reagire altrettanto bene ai controlli 2D accessibili come mouse e gamepad.