System podstawowy
Sercem systemu wejściowego jest system InputSystem, który jest usługą odpowiedzialną za inicjowanie i obsługę wszystkich funkcji związanych z wprowadzaniem skojarzonych z mrTK.
Uwaga
Zakłada się, że czytelnicy już przeczytali i mają podstawową wiedzę na temat sekcji terminologii .
Ta usługa jest odpowiedzialna za:
- Odczytywanie profilu systemu wejściowego
- Uruchamianie skonfigurowanych dostawców danych (na przykład
Windows Mixed Reality Device Manager
iOpenVR Device Manager
). - Wystąpienia elementu GazeProvider, który jest składnikiem odpowiedzialnym za dostarczanie informacji o spojrzeniach głowy HoloLens (1. generacji) oprócz informacji o spojrzeniach o stylu HoloLens 2.
- Wystąpienia obiektu FocusProvider, który jest składnikiem odpowiedzialnym za określanie obiektów, które mają fokus. Opisano to bardziej szczegółowo w sekcji wskaźników i fokusu w dokumentacji.
- Udostępnianie punktów rejestracji dla wszystkich zdarzeń wejściowych (jako odbiorników globalnych).
- Zapewnianie możliwości wysyłania zdarzeń dla tych zdarzeń wejściowych.
Zdarzenia wejściowe
Zdarzenia wejściowe są zwykle wyzjemniane na dwóch różnych kanałach:
Obiekty w centrum uwagi
Zdarzenia mogą być wysyłane bezpośrednio do obiektu GameObject, który ma fokus. Na przykład obiekt może mieć skrypt, który implementuje element IMixedRealityTouchHandler
.
Ten obiekt będzie miał zdarzenia dotykowe, gdy będzie skoncentrowany przy ręki, która znajduje się w pobliżu. Tego typu zdarzenia są "w górę" hierarchii gameObject do momentu, gdy znajdzie ona projekt GameObject, który jest w stanie obsługi zdarzenia.
Jest to wykonywane przy użyciu funkcji ExecuteHierarchy z domyślnej implementacji systemu wejściowego.
Odbiorniki globalne
Zdarzenia mogą być wysyłane do odbiorników globalnych. Można zarejestrować wszystkie zdarzenia wejściowe przy użyciu interfejsu systemu wejściowego IMixedRealityEventSystem
. Zaleca się używanie metody RegisterHandlerRegister
do rejestrowania zdarzeń globalnych — przestarzała funkcja spowoduje, że odbiorniki będą powiadamiane o WSZYSTKICH zdarzeniach wejściowych, a nie tylko zdarzeniach wejściowych określonego typu (gdzie typ jest definiowany przez interfejs zdarzeń).
Należy pamiętać , że odbiorniki rezerwowe są innym typem odbiorników globalnych, które również nie są zalecane, ponieważ odbierają każde pojedyncze zdarzenie wejściowe, które nie zostało obsłużone w innym miejscu sceny.
Kolejność wysyłania zdarzeń
Ogólnie rzecz biorąc, zdarzenia są wysyłane do odbiorników w następujący sposób. Należy pamiętać, że jeśli którykolwiek z poniższych kroków oznaczy zdarzenie jako obsłużone, proces wysyłania zdarzeń zostanie zatrzymany.
- Zdarzenie jest wysyłane do odbiorników globalnych.
- Zdarzenie jest wysyłane do modalnych okien dialogowych obiektu ukierunkowanego.
- Zdarzenie jest wysyłane do obiektu ukierunkowanego.
- Zdarzenie jest wysyłane do odbiorników rezerwowych.
Menedżerowie urządzeń i dostawcy danych
Te jednostki są odpowiedzialne za pośrednictwem interfejsów API niższego poziomu (takich jak interfejsy API Windows Mixed Reality lub interfejsy API OpenVR) i tłumaczenie danych z tych systemów na te, które pasują do abstrakcji danych wejściowych wyższego poziomu mrTK. Są one odpowiedzialne za wykrywanie i tworzenie kontrolerów oraz zarządzanie nimi.
Podstawowy przepływ menedżera urządzeń obejmuje:
- Menedżer urządzeń jest wystąpieniami usługi systemu wejściowego.
- Menedżer urządzeń rejestruje się w bazowym systemie (na przykład menedżer urządzeń Windows Mixed Reality rejestruje zdarzenia wejściowe igestów.
- Tworzy kontrolery, które odnajduje w bazowym systemie (na przykład dostawca może wykryć obecność usterek)
- W pętli Update() wywołaj updateController(), aby sondować nowy stan systemu bazowego i zaktualizować jego reprezentację kontrolera.