System wejściowy

System wejściowy jest jednym z największych systemów spośród wszystkich funkcji oferowanych przez zestaw narzędzi MRTK. Tak wiele elementów w zestawie narzędzi opiera się na nim (wskaźniki, fokus, prefabryki). Kod w systemie wejściowym umożliwia naturalne interakcje, takie jak chwyt i obracanie na różnych platformach.

System wejściowy ma własną terminologię, którą warto zdefiniować:

  • Dostawcy danych

    Ustawienia danych wejściowych w profilu wejściowym zawierają odwołania do jednostek znanych jako dostawcy danych — innego słowa opisującego te ustawienia są menedżerami urządzeń. Są to składniki, których zadaniem jest rozszerzenie systemu wejściowego zestawu narzędzi MRTK przez połączenie z określonym systemem bazowym. Przykładem dostawcy jest dostawca Windows Mixed Reality, którego zadaniem jest rozmowa z podstawowymi interfejsami API Windows Mixed Reality, a następnie tłumaczenie danych z tych interfejsów API na pojęcia wejściowe specyficzne dla zestawu narzędzi MRTK poniżej. Innym przykładem jest dostawca OpenVR (którego zadaniem jest rozmowa z abstrakcyjną wersją interfejsów API OpenVR aparatu Unity, a następnie tłumaczenie tych danych na pojęcia wejściowe zestawu NARZĘDZI MRTK).

  • Kontroler

    Reprezentacja kontrolera fizycznego (niezależnie od tego, czy jest to 6-stopniowy kontroler swobody, HoloLens 1-stylowa ręka z obsługą gestów, w pełni wyrażona ręka, kontroler ruchu skokowego itp.). Kontrolery są duplikowane przez menedżerów urządzeń (tj. menedżer urządzeń WMR zduplikuje kontroler i zarządza jego okres istnienia, gdy widzi wyartygowany rękę wchodząc w życie).

  • Wskaźnik

    Kontrolery używają wskaźników do interakcji z obiektami gry. Na przykład wskaźnik bliskiej interakcji jest odpowiedzialny za wykrywanie, gdy ręka (który jest kontrolerem) znajduje się blisko obiektów, które anonsują się jako obsługujące "niemal interakcję". Inne przykłady wskaźników to teleportacja lub skrajne wskaźniki (tj. wskaźnik promienia ręki powłoki), które używają far raycasts do angażowania się w zawartość dłuższą niż długość broni od użytkownika.

    Wskaźniki są tworzone przez menedżera urządzeń, a następnie dołączane do źródła danych wejściowych. Aby uzyskać wszystkie wskaźniki dla kontrolera, wykonaj następujące czynności: controller.InputSource.Pointers

    Należy pamiętać, że kontroler może być skojarzony z wieloma różnymi wskaźnikami w tym samym czasie. W celu zapewnienia, że nie spowoduje to chaosu, istnieje pośrednik, który kontroluje, które wskaźniki mogą być aktywne (na przykład pośrednik wyłączy daleko wskaźniki interakcji po wykryciu bliskiej interakcji).

  • Ukierunkowanie

    Zdarzenia wskaźnika są wysyłane do obiektów w fokusie. Wybór fokusu będzie się różnić w zależności od typu wskaźnika; wskaźnik promienia ręcznego będzie używać raycasts, podczas gdy wskaźnik kłusu będzie używać kulecasts. Aby uzyskać fokus, obiekt musi implementować element IMixedRealityFocusHandler. Istnieje możliwość globalnego zarejestrowania obiektu w celu odbierania niefiltrowanych zdarzeń wskaźnika, ale takie podejście nie jest zalecane.

    Składnik, który aktualizuje, które obiekty znajdują się w fokusie, to FocusProvider

  • Kursor

    Jednostka skojarzona ze wskaźnikiem, która zapewnia dodatkowe sygnały wizualne dotyczące interakcji wskaźnika. Na przykład fingerCursor będzie renderować pierścień wokół palca i może obracać ten pierścień, gdy palec znajduje się blisko obiektów "blisko interakcji". Wskaźnik może być skojarzony z pojedynczym kursorem w czasie.

  • Interakcja i manipulowanie

    Obiekty można otagować za pomocą skryptu interakcji lub manipulowania. Może to być za pośrednictwem elementu Interactablelub podobnego do NearInteractionGrabbable/ManipulationHandler.

    Na przykład funkcja NearInteractionGrabbable i NearInteractionTouchable umożliwiają określenie, na których obiektach można skoncentrować się na niektórych wskaźnikach (szczególnie w pobliżu wskaźników interakcji).

    Interakcje i program ManipulationHandler to przykłady składników, które nasłuchują zdarzeń wskaźnika w celu modyfikowania wizualizacji interfejsu użytkownika lub przenoszenia/skalowania/obracania obiektów gry.

Poniższy obraz przechwytuje kompilację wysokiego poziomu (od dołu) stosu wejściowego zestawu narzędzi MRTK:

Input System Diagram