Delen via


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.

Overnamediagram voor interactie

  • 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 zoals IsGazeHovered of zijn snelkoppelingen voor het uitvoeren van query's of een deelnemende interactie een bepaalde interface implementeert (overeenkomstig of IGazeInteractorIGrabInteractor).IsGrabSelected Deze vlaggen presteren beter dan het doorlopen van de lijst met interactorsHovering of interactorsSelecting. Bovendien MRTKBaseInteractable kan bepaalde typen interactors filteren/afwijzen in het geval dat de ontwikkelaar bepaalde invoermethoden wil uitsluiten.
  • 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.

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.

Strikte isolatie van status en visuals

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 StatefulInteractableeen 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.

Variabele geselecteerdheid

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 interactorsSelectingisSelected .

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.

UGUI-adapterstroom

Wanneer de CanvasProxyInteractor op de hoogte wordt gesteld van de UGUI-gebeurtenissen door , UGUIInputAdaptergeeft 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.