Interactieables — MRTK3
MRTK bouwt voort op de XRBaseInteractable
die wordt geleverd door de XR Interaction Toolkit van Unity. Het bestaande interactiebare gedrag en de BESTAANDE API worden volledig ondersteund in MRTK en al onze aangepaste interactieables voldoen aan de bestaande interactiebare XRI-API.
Voor ontwikkelaars die niet bekend zijn met XRI, raden we u ten zeerste aan eerst de documentatie voor de XRI-architectuur van Unity te raadplegen.
Mrtk biedt twee basisklassen waarop geavanceerde interacties kunnen worden gebouwd, waarbij de ene wordt uitgebreid met de andere om de interactie uit te breiden.
MRTKBaseInteractable : XRBaseInteractable
- Deze klasse biedt filteren en markeren voor verschillende typen interactors. Hoewel de basis-XRI
XRBaseInteractable
geen onderscheid maakt tussen typen interactie,MRTKBaseInteractable
biedt gemaksfuncties om te controleren of er veelvoorkomende typen interacties plaatsvinden. Gemakseigenschappen zoalsIsGazeHovered
of zijn snelkoppelingen voor het uitvoeren van query's of een deelnemende interactie een bepaalde interface implementeert (overeenkomstig ofIGazeInteractor
IGrabInteractor
).IsGrabSelected
Deze vlaggen presteren beter dan het doorlopen van de lijst metinteractorsHovering
ofinteractorsSelecting
. BovendienMRTKBaseInteractable
kan bepaalde typen interactors filteren/afwijzen in het geval dat de ontwikkelaar bepaalde invoermethoden wil uitsluiten.
- Deze klasse biedt filteren en markeren voor verschillende typen interactors. Hoewel de basis-XRI
StatefulInteractable : MRTKBaseInteractable
- Hoewel
MRTKBaseInteractable
u vlaggen en filters toevoegt en geen extra status toevoegt aan de interactiebare,StatefulInteractable
introduceert u nuttige stateful functies zoals wisselknop en variabele selectie.
- Hoewel
Strikte scheiding van status en visuals
In MRTK 2.x waren interactie-elementen vaak verantwoordelijk voor het aansturen van hun eigen visuele effecten, of het nu het comprimeren van een 3D-knop, een aanwijseffect of zelfs het wijzigen van de kleur met een klik. De beperking van deze benadering is dat de interactielogica nauw is gebonden aan de visuals. Als u de visuals opnieuw wilt ontwerpen of een andere grootte/vorm/verplaatsing/enzovoort wilt gebruiken. van knop, moet het interactiescript zelf worden gewijzigd.
In MRTK3 zijn interactieables een pure status en interactie. De interactiebare geeft geen visuele wijzigingen of effecten weer op basis van de interne status. Het is puur een verzameling status- en interactielogica die zeer draagbaar is tussen visuele presentatie-instellingen.
Hetzelfde PressableButton
script kan worden gebruikt voor het bouwen van een squishy bal, een drukbaar 'trackpad'-achtig vlak of een abstracte drukbaar die netwerkgebeurtenissen bij pers uitgeeft. Het PressableButton
script maakt niet eens uit waar het zich bevindt; het kan zich in een canvas of op een starre plaats bevinden.
Om visuals aan te sturen, wordt een afzonderlijk 'visual-stuurprogramma' gebruikt om de status van de interactiebare te peilen en de juiste feedback weer te geven.
StateVisualizer
is de aanbevolen methode met weinig code voor het stimuleren van algemene visuele feedback-effecten vanuit interactiebare status, maar ontwikkelaars kunnen hun eigen aangepaste visuele stuurprogramma's schrijven. Onze knoponderdelen gebruiken StateVisualizer
bijvoorbeeld over het algemeen voor hun geavanceerde feedback-effecten op basis van 3D en shader, maar we bieden ook een voorbeeld BasicPressableButtonVisuals
dat laat zien hoe een eenvoudig visueel stuurprogramma in code kan worden geschreven.
Variabeleselectie
StatefulInteractable
's meest nuttige aanvullende functie ten opzichte van de basis XRI-functionaliteit is ondersteuning voor variabele Selectedness
. Hoewel XRI-basis-interactieables al dan niet zijn geselecteerd, kunnen MRTK's StatefulInteractable
een drijvendekommagefractie van de geselecteerde zijn.
Dit concept is handig bij het werken in XR, omdat bijna alle vormen van invoer niet langer binaire statussen zijn. Bewegingscontrollers hebben vaak analoge triggers (of analoge grips!), handinteracties kunnen een variabele 'knijpbaarheid' bieden en volumetrische drukinteracties kunnen een knop of drukbaar oppervlak met een variërende hoeveelheid drukken. U ziet deze variabele, analoge interacties overal in XR en MRTK is uitgerust om ontwikkelaars te helpen bij het bouwen van prachtige interacties op deze analoge ingangen.
Een breed scala aan verschillende interactors en typen interacties kunnen allemaal samen bijdragen aan de algehele selectie van een interactiebare. Met name alle interactors die implementeren IVariableSelectInteractor
, dragen hun analoge selectiebedrag bij, meestal via een max()
van alle deelnemende interactors. Deze variabele hoeveelheid wordt gecombineerd met de binaire, niet-variabele selecties die afkomstig zijn van vanille-achtige interactors.
Voor afgeleide klassen, zoals PressableButton
, wordt de Selectedness()
functie overschreven om een extra 'ingrediënt' toe te voegen aan de berekening van de geselecteerdheid. Interactors die implementeren IPokeInteractor
, kunnen een bijdrage leveren aan de selectie op basis van hun fysieke locatie en hoe ze fysiek op de interactiebare drukken. Andere afgeleide klassen kunnen andere, willekeurige vormen van selectie introduceren.
Voor de interactieables die MRTK biedt, Selectedness()
en zal altijd "akkoord" - met andere woorden, u zult nooit een Selectedness()
groter dan de SelectThreshold
observeren zonder een bijbehorende XRI isSelected
en een bijbehorende interactor in interactorsSelecting
isSelected
.
Belangrijk
Uw aangepaste, interactief te gebruiken subklassen kunnen uiteraard worden overschreven Selectedness
naar een andere waarde die volledig is losgekoppeld van de XRI isSelected
. Onze interactiemogelijkheden doen dit echter niet en we raden dit sterk af. Schrijf over het algemeen nooit interacties die geen bijbehorende interactie hebben. XRI-selectie is in de overgrote meerderheid van de gevallen voldoende en alle aangepaste interacties die u bouwt, moeten worden geschreven als interactors.
Wanneer u een aangepaste interactie mogelijk maakt die ondersteuning biedt voor een nieuwe methode voor het bepalen Selectedness()
van , overschrijft u de methode en combineert u de nieuwe selectie met de bestaande selectiehoeveelheid. Als u of StateVisualizer
een andere visuele laag gebruikt die luistert naar variabele selectie, reageert deze dienovereenkomstig op uw nieuwe selectietype.
UGUI-gebeurtenissen toewijzen aan XRI
In sommige gevallen is het wenselijk om interactie te laten reageren op UGUI-gebeurtenissen, zoals muis, gamepad of touchscreen-invoer. De UGUIInputAdapter
, een UGUI Selectable
, ontvangt UGUI-gebeurtenissen en stuurt deze door naar een CanvasProxyInteractor
, als er een aanwezig is.
Wanneer de CanvasProxyInteractor
op de hoogte wordt gesteld van de UGUI-gebeurtenissen door , UGUIInputAdapter
geeft het gelijkwaardige XRI-acties uit op de relevante interactie. De toewijzing tussen UGUI-invoer en XRI-acties is enigszins verliesachtig en is een gebied van actieve ontwikkeling.
Met dit systeem kunnen bestaande XRI-besturingselementen die zijn gebouwd voor meeslepende platforms, handen, bewegingscontrollers en 3D-invoer even goed reageren op toegankelijke 2D-besturingselementen zoals muis en gamepad.