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
Interactable
lub podobnego doNearInteractionGrabbable
/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: