Terminologi för indatasystem – MRTK2

Indatasystemet är ett av de största systemen av alla funktioner som erbjuds av MRTK. Så många saker i verktygslådan bygger på den (pekare, fokus, prefabs). Koden i indatasystemet är det som möjliggör naturliga interaktioner som att hämta och rotera mellan plattformar.

Indatasystemet har en del av sin egen terminologi som är värd att definiera:

  • Dataprovidrar

    Indatainställningarna i indataprofilen har referenser till entiteter som kallas dataprovidrar – ett annat ord som beskriver dessa är enhetshanterare. Det här är komponenter vars jobb är att utöka MRTK-indatasystemet genom att samverka med ett specifikt underliggande system. Ett exempel på en leverantör är den Windows Mixed Reality providern, vars uppgift är att kommunicera med underliggande Windows Mixed Reality-API:er och sedan översätta data från dessa API:er till MRTK-specifika indatabegrepp nedan. Ett annat exempel är OpenVR-providern (vars uppgift är att kommunicera med Unity-abstrakta versioner av OpenVR-API:er och sedan översätta dessa data till MRTK-indatabegrepp).

  • Kontrollant

    En representation av en fysisk kontrollant (oavsett om det är en 6 graders frihetskontrollant, en HoloLens-hand i 1-stil med geststöd, en fullt artikulerad hand, en språngrörelsekontrollant osv.). Kontrollanter skapas av enhetshanterare (d.v.s. WMR-enhetshanteraren skapar en kontrollant och hanterar dess livslängd när den ser en ledad hand uppstå).

  • Pekaren

    Kontrollanter använder pekare för att interagera med spelobjekt. Till exempel ansvarar pekaren för nära interaktion för att identifiera när handen (som är en kontrollant) är nära objekt som annonserar sig själva som stöd för "nära interaktion". Andra exempel på pekare är teleportering eller långt pekare (dvs. skalhandstrålepekaren) som använder långt raycasts för att interagera med innehåll som är längre än användarens vapenlängd.

    Pekare skapas av enhetshanteraren och kopplas sedan till en indatakälla. Så här hämtar du alla pekare för en kontrollant: controller.InputSource.Pointers

    Observera att en kontrollant kan associeras med många olika pekare på samma gång. För att säkerställa att detta inte övergår i kaos finns det en pekarmedlare som styr vilka pekare som tillåts vara aktiva (till exempel inaktiverar medlaren avlägsna interaktionspekare när nära interaktion identifieras).

  • Fokus

    Pekarhändelser skickas till objekt i fokus. Markeringen av fokus varierar beroende på pekartyp. en handstråle pekare kommer att använda raycasts, medan en poke pekare kommer att använda spherecasts. Ett objekt måste implementera IMixedRealityFocusHandler för att få fokus. Det är möjligt att globalt registrera ett objekt för att ta emot ofiltrerade pekarhändelser, men den här metoden rekommenderas inte.

    Komponenten som uppdaterar vilka objekt som är i fokus är FocusProvider

  • Markören

    En entitet som är associerad med en pekare som ger ytterligare visuella tips kring pekarinteraktion. Till exempel renderar FingerCursor en ring runt fingret och kan rotera ringen när fingret är nära "nära interagerande" objekt. En pekare kan associeras med en enda markör i taget.

  • Interaktion och manipulering

    Objekt kan taggas med ett interaktions- eller manipuleringsskript. Detta kan vara via en Interactable, eller något i stil med/NearInteractionGrabbableManipulationHandler .

    NearInteractionGrabbable och NearInteractionTouchable gör det till exempel möjligt för vissa pekare (särskilt nära interaktionspekare) att veta vilka objekt som kan fokuseras på.

    Interactable och ManipulationHandler är exempel på komponenter som lyssnar på pekarhändelser för att ändra visuella gränssnittsobjekt eller flytta/skala/rotera spelobjekt.

Bilden nedan visar högnivåuppbyggnad (nedifrån och upp) av MRTK-indatastacken:

Diagram över indatasystem