Terminologie des Eingabesystems – MRTK2

Das Eingabesystem ist eines der größten Systeme aller Features, die mrTK bietet. So viele Dinge im Toolkit bauen darauf auf (Zeiger, Fokus, Prefabs). Der Code innerhalb des Eingabesystems ermöglicht natürliche Interaktionen wie greifen und sich plattformübergreifend drehen.

Das Eingabesystem verfügt über eine eigene Terminologie, die es wert ist, Folgendes zu definieren:

  • Datenanbieter

    Die Eingabeeinstellungen im Eingabeprofil enthalten Verweise auf Entitäten, die als Datenanbieter bezeichnet werden. Ein weiteres Wort, das diese Beschreibt, sind Geräte-Manager. Dabei handelt es sich um Komponenten, deren Aufgabe darin besteht, das MRTK-Eingabesystem zu erweitern, indem es mit einem bestimmten zugrunde liegenden System interfaciert wird. Ein Beispiel für einen Anbieter ist der Windows Mixed Reality Anbieter, dessen Aufgabe es ist, mit den zugrunde liegenden Windows Mixed Reality-APIs zu kommunizieren und dann die Daten aus diesen APIs unten in MRTK-spezifische Eingabekonzepte zu übersetzen. Ein weiteres Beispiel wäre der OpenVR-Anbieter (dessen Aufgabe es ist, mit unity-abstrahierten Versionen von OpenVR-APIs zu kommunizieren und diese Daten dann in MRTK-Eingabekonzepte zu übersetzen).

  • Controller

    Eine Darstellung eines physischen Controllers (ob es sich um einen 6-Grad-Freiheitscontroller, eine Hand im HoloLens 1-Stil mit Gestenunterstützung, eine vollständig artikulierte Hand, einen Schaltbewegungscontroller usw.) handelt. Controller werden von Gerätemanagern erstellt (d. h. der WMR-Geräte-Manager erzeugt einen Controller und verwaltet seine Lebensdauer, wenn eine artikulierte Hand ins Leben kommt).

  • Zeiger

    Controller verwenden Zeiger, um mit Spielobjekten zu interagieren. Beispielsweise ist der Naheinteraktionszeiger dafür verantwortlich, zu erkennen, wann sich die Hand (bei der es sich um einen Controller handelt) in der Nähe von Objekten befindet, die sich selbst als unterstützende "nahe Interaktion" ankündigen. Weitere Beispiele für Zeiger sind Teleportations- oder Fernzeiger (d. h. der Shellhandstrahlzeiger), die weit entfernte Raycasts verwenden, um mit Inhalten zu interagieren, die länger als die Armlänge des Benutzers sind.

    Zeiger werden vom Geräte-Manager erstellt und dann an eine Eingabequelle angefügt. Gehen Sie folgendermaßen vor, um alle Zeiger für einen Controller abzurufen: controller.InputSource.Pointers

    Beachten Sie, dass ein Controller mit vielen verschiedenen Zeigern gleichzeitig verknüpft werden kann. Um sicherzustellen, dass dies nicht zu Chaos führt, gibt es einen Zeigervermittler, der steuert, welche Zeiger aktiv sein dürfen (z. B. deaktiviert der Mediator weit entfernte Interaktionszeiger, wenn eine nahe Interaktion erkannt wird).

  • Fokus

    Zeigerereignisse werden an Objekte im Fokus gesendet. Die Fokusauswahl variiert je nach Zeigertyp. Ein Handstrahlzeiger verwendet Raycasts, während ein Pokezeiger Spherecasts verwendet. Ein Objekt muss IMixedRealityFocusHandler implementieren, um den Fokus zu erhalten. Es ist möglich, ein Objekt global zu registrieren, um ungefilterte Zeigerereignisse zu empfangen, aber dieser Ansatz wird nicht empfohlen.

    Die Komponente, die aktualisiert, welche Objekte im Fokus sind, ist focusProvider.

  • Cursor

    Eine Entität, die einem Zeiger zugeordnet ist und zusätzliche visuelle Hinweise zur Zeigerinteraktion gibt. Der FingerCursor rendert beispielsweise einen Ring um Ihren Finger und kann diesen Ring drehen, wenn sich Ihr Finger nahe an "nahezu interagierbaren" Objekten befindet. Ein Zeiger kann jeweils einem einzelnen Cursor zugeordnet werden.

  • Interaktion und Manipulation

    Objekte können mit einem Interaktions- oder Bearbeitungsskript markiert werden. Dies kann über ein Interactableoder etwa NearInteractionGrabbable/ManipulationHandlererfolgen.

    Beispielsweise ermöglichen NearInteractionGrabbable und NearInteractionTouchable, dass bestimmte Zeiger (insbesondere nahe Interaktionszeiger) wissen, auf welche Objekte sich konzentrieren können.

    Interactable und ManipulationHandler sind Beispiele für Komponenten, die auf Zeigerereignisse lauschen, um Visuals der Benutzeroberfläche zu ändern oder Spielobjekte zu verschieben/zu skalieren/zu drehen.

In der folgenden Abbildung wird der allgemeine Aufbau des MRTK-Eingabestapels (von unten nach oben) erfasst:

Eingabesystemdiagramm