Invoersysteemterminologie — MRTK2

Het invoersysteem is een van de grootste systemen van alle functies van MRTK. Er zijn zoveel dingen in de toolkit die erop voortbouwen (pointers, focus, prefabs). De code binnen het invoersysteem maakt natuurlijke interacties mogelijk, zoals grab and rotate op verschillende platforms.

Het invoersysteem heeft een aantal van zijn eigen terminologie die de moeite waard is om te definiëren:

  • Gegevensproviders

    De invoerinstellingen in het invoerprofiel hebben verwijzingen naar entiteiten die bekend staan als gegevensproviders. Een ander woord waarmee deze worden beschreven, zijn apparaatbeheerders. Dit zijn onderdelen waarvan het de taak is om het MRTK-invoersysteem uit te breiden door te werken met een specifiek onderliggend systeem. Een voorbeeld van een provider is de Windows Mixed Reality provider, wiens taak het is om te praten met de onderliggende Windows Mixed Reality API's en de gegevens van deze API's vervolgens te vertalen naar MRTK-specifieke invoerconcepten hieronder. Een ander voorbeeld is de OpenVR-provider (waarvan het de taak is om te communiceren met de Unity-abstracte versie van OpenVR API's en die gegevens vervolgens te vertalen in MRTK-invoerconcepten).

  • Controller

    Een weergave van een fysieke controller (of het nu een controller met 6 vrijheidsgraden is, een HoloLens 1-stijl hand met ondersteuning voor gebaren, een volledig gearticuleerde hand, een sprongbewegingscontroller, enzovoort). Controllers worden voortgebracht door apparaatbeheerders (dat wil zeggen dat de WMR-apparaatbeheerder een controller voortgebracht en de levensduur ervan beheert wanneer er een gelede hand ontstaat).

  • Aanwijzer

    Controllers gebruiken aanwijzers om te communiceren met gameobjecten. De aanwijzer voor bijna-interactie is bijvoorbeeld verantwoordelijk voor het detecteren wanneer de hand (een controller) zich dicht bij objecten bevindt die zichzelf adverteren als ondersteuning voor 'bijna-interactie'. Andere voorbeelden voor aanwijzers zijn teleportatie of verre aanwijzers (dat wil zeggen de shell hand ray pointer) die gebruikmaken van verre raycasts om inhoud te benaderen die langer is dan de lengte van de armen van de gebruiker.

    Aanwijzers worden gemaakt door apparaatbeheer en vervolgens gekoppeld aan een invoerbron. Als u alle aanwijzers voor een controller wilt ophalen, doet u het volgende: controller.InputSource.Pointers

    Houd er rekening mee dat een controller aan veel verschillende aanwijzers tegelijk kan worden gekoppeld. Om ervoor te zorgen dat dit niet in chaos verandert, is er een aanwijzermediator die bepaalt welke aanwijzers actief mogen zijn (de bemiddelaar schakelt bijvoorbeeld ver-interactiepunten uit wanneer bijna-interactie wordt gedetecteerd).

  • Focus

    Aanwijzer-gebeurtenissen worden verzonden naar objecten met focus. De focusselectie verschilt per type aanwijzer; een handstraalpointer gebruikt raycasts, terwijl een aanwijzer spherecasts gebruikt. Een object moet IMixedRealityFocusHandler implementeren om de focus te ontvangen. Het is mogelijk om een object globaal te registreren om ongefilterde aanwijzergebeurtenissen te ontvangen, maar deze benadering wordt niet aanbevolen.

    Het onderdeel waarmee wordt bijgewerkt welke objecten de focus hebben, is de FocusProvider

  • Cursor

    Een entiteit die is gekoppeld aan een aanwijzer die extra visuele aanwijzingen geeft voor interactie met de aanwijzer. De FingerCursor geeft bijvoorbeeld een ring weer rond uw vinger en kan die ring draaien wanneer uw vinger zich in de buurt van 'bijna-interactiebare' objecten bevindt. Een aanwijzer kan tegelijkertijd aan één cursor worden gekoppeld.

  • Interactie en manipulatie

    Objecten kunnen worden getagd met een interactie- of manipulatiescript. Dit kan zijn via een Interactable, of zoiets als/NearInteractionGrabbableManipulationHandler .

    Met NearInteractionGrabbable en NearInteractionTouchable kunnen bepaalde aanwijzers (met name in de buurt van interactiepointers) bijvoorbeeld weten op welke objecten de focus kan worden gericht.

    Interactable en ManipulationHandler zijn voorbeelden van onderdelen die luisteren naar aanwijzer-gebeurtenissen om UI-visuals te wijzigen of gameobjecten te verplaatsen/schalen/draaien.

In de onderstaande afbeelding ziet u de opbouw op hoog niveau (van onderaf) van de MRTK-invoerstack:

Invoersysteemdiagram