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.
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à comeIsGazeHovered
oIsGrabSelected
sono tasti di scelta rapida per eseguire query su se un interagisce partecipante implementa un'interfaccia specificata (corrispondentementeIGazeInteractor
oIGrabInteractor
). Questi flag sono più efficienti rispetto all'iterazione tramite l'elenco diinteractorsHovering
ointeractorsSelecting
. Inoltre,MRTKBaseInteractable
può filtrare/rifiutare determinati tipi di interagiscitori nel caso in cui lo sviluppatore desideri escludere determinate modalità di input.
- Questa classe offre filtri e contrassegni per diversi tipi di interazione. Anche se la base XRI
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.
- Mentre
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.
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
StatefulInteractable
La 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 StatefulInteractable
può 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.
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 Selectable
e li inoltra a , CanvasProxyInteractor
se presente.
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.