Kernsysteem — MRTK2

De kern van het invoersysteem is het InputSystem, een service die verantwoordelijk is voor het initialiseren en uitvoeren van alle invoergerelateerde functionaliteit die is gekoppeld aan MRTK.

Notitie

Er wordt van uitgegaan dat lezers de terminologiesectie al hebben gelezen en er een basiskennis van hebben.

Deze service is verantwoordelijk voor:

  • Het invoersysteemprofiel lezen
  • De geconfigureerde gegevensproviders starten (bijvoorbeeld Windows Mixed Reality Device Manager en OpenVR Device Manager).
  • Instantiëring van de GazeProvider, een onderdeel dat verantwoordelijk is voor het verstrekken van informatie over hoofd staren in HoloLens-stijl (1e generatie), naast HoloLens 2 informatie over het kijken naar de stijl van de ogen.
  • Instantiëring van de FocusProvider, een onderdeel dat verantwoordelijk is voor het bepalen van objecten die de focus hebben. Dit wordt uitgebreider beschreven in de sectie pointers and focus van de documentatie.
  • Registratiepunten opgeven voor alle invoerevenementen (als globale listeners).
  • Mogelijkheden voor gebeurtenisverzending bieden voor deze invoerevenementen.

Invoer gebeurtenissen

Invoer gebeurtenissen worden over het algemeen geactiveerd op twee verschillende kanalen:

Objecten in focus

Gebeurtenissen kunnen rechtstreeks worden verzonden naar een GameObject met focus. Een -object kan bijvoorbeeld een script hebben waarmee wordt geïmplementeerd IMixedRealityTouchHandler. Dit object krijgt aanraak-gebeurtenissen wanneer deze is gericht door een hand die zich in de buurt bevindt. Dit soort gebeurtenissen gaat omhoog in de GameObject-hiërarchie totdat er een GameObject wordt gevonden dat de gebeurtenis kan verwerken.

Dit wordt gedaan met behulp van ExecuteHierarchy vanuit de standaardinvoersysteemimplementatie.

Wereldwijde listeners

Gebeurtenissen kunnen worden verzonden naar globale listeners. Het is mogelijk om u te registreren voor alle invoer gebeurtenissen met behulp van de interface van IMixedRealityEventSystem het invoersysteem. Het wordt aanbevolen om de methode RegisterHandler te gebruiken voor het registreren van algemene gebeurtenissen. De afgeschafte Register functie zorgt ervoor dat listeners op de hoogte worden gesteld van ALLE invoergebeurtenissen, in plaats van alleen invoergebeurtenissen van een bepaald type (waarbij het type wordt gedefinieerd door de gebeurtenisinterface).

Houd er rekening mee dat terugvallisteners een ander type globale listeners zijn die ook worden afgeraden omdat ze elke invoergebeurtenis ontvangen die niet elders in de scène is verwerkt.

Volgorde van verzending van gebeurtenis

Over het algemeen worden gebeurtenissen op de volgende manier naar listeners verzonden. Houd er rekening mee dat als een van de onderstaande stappen de gebeurtenis markeert als verwerkt, het proces voor het verzenden van gebeurtenissen wordt gestopt.

  1. Gebeurtenis wordt verzonden naar globale listeners.
  2. Gebeurtenis wordt verzonden naar modale dialoogvensters van het object met prioriteit.
  3. De gebeurtenis wordt verzonden naar het object met prioriteit.
  4. De gebeurtenis wordt verzonden naar terugvallisteners.

Apparaatbeheerders en gegevensproviders

Deze entiteiten zijn verantwoordelijk voor de interactie met API's op een lager niveau (zoals Windows Mixed Reality API's of OpenVR-API's) en het vertalen van gegevens van deze systemen naar systemen die passen bij de invoerabstracties op een hoger niveau van de MRTK. Ze zijn verantwoordelijk voor het detecteren, maken en beheren van de levensduur van controllers.

De basisstroom van een apparaatbeheer omvat:

  1. Het apparaatbeheer wordt geïnstantieerd door de invoersysteemservice.
  2. Apparaatbeheer registreert zich met het onderliggende systeem (de Windows Mixed Reality apparaatbeheer registreert zich bijvoorbeeld voor invoer- en gebarengebeurtenissen.
  3. Er worden controllers gemaakt die worden gedetecteerd vanuit het onderliggende systeem (de provider kan bijvoorbeeld de aanwezigheid van gearticuleerde handen detecteren)
  4. Roep in de update()-lus UpdateController() aan om de nieuwe status van het onderliggende systeem te peilen en de weergave van de controller bij te werken.