Udostępnij za pośrednictwem


Podsystemy — MRTK3

MRTK3 korzysta z infrastruktury zarządzania podsystemem XR aparatu Unity do pisania rozszerzalnych modułów, które mogą pomóc zapewnić obsługę międzyplatformową dla funkcji, takich jak mowę i śledzenie rąk. Te podsystemy są inicjowane i ładowane przez aparat Unity wraz z istniejącymi podsystemami natywnymi aparatu Unity, takimi jak XRMeshSubsystem i XRInputSubsystem. Zapoznaj się z dokumentacją dotyczącą sposobu działania podsystemów aparatu Unity.

Filozofii

W zestawie narzędzi MRTK w wersji 2 "usługi" zapewniały wiele funkcji w samej scenie. Tworzyłyby wystąpienia obiektów, przenosiły obiekty, aktualizowały hierarchię scen itp. W narzędziu MRTK3 podsystemy nie modyfikują jawnie sceny. Podsystemy MRTK3 to modułowi dostawcy danych, informacji lub zdarzeń lub wykonywania obliczeń dla użytkowników końcowych. Jeśli coś w scenie powinno się zmienić lub działać na podstawie danych wejściowych, musi istnieć oddzielny składnik wizualizatora oparty na scenie, aby działał na danych. Ten podział zapewnia, że podsystemy nie są destrukcyjne w odniesieniu do zmian sceny i nie powodują efektów ubocznych związanych ze sceną.

Podczas gdy mrTK v2 używane systemy i usługi liberalnie do przetwarzania danych wejściowych, MRTK3 zazwyczaj używa openXR i systemu wprowadzania unity dla danych wejściowych międzyplatformowych. Jednak niektóre typy danych nie są jeszcze opakowane przez system wejściowy. W takich przypadkach udostępniamy interfejsy międzyplatformowe za pośrednictwem naszych podsystemów.

Cykl życia podsystemu MRTK

Definicje podsystemu dołączone do infrastruktury aparatu Unity oferują proste metody cyklu życia, takie jak Start, Stopi Destroy. Rozszerzamy tę definicję tak, aby zawierała przydatne metody "znaczniki", takie jak Update, LateUpdatei FixedUpdate. Zarządzamy MRTKLifecycleManager podsystemami, które implementują interfejs cyklu życia. Ten menedżer cyklu życia jest jedynym rozwiązaniem MonoBehaviour zaangażowanym w architekturę podsystemu; można to umieścić w dowolnym miejscu w scenie, ale mamy tendencję do opuszczenia go gdzieś na Rig.

Wykonywanie zapytania

Wykonywanie zapytań dotyczących implementacji podsystemu jest proste i wydajne.

// Gets the first valid implementation of T that is started and running.
T mySubsystem = XRSubsystemHelpers.GetFirstRunningSubsystem<T>();

// Gets the first valid implementation of T, even if it hasn't been started.
T mySubsystem = XRSubsystemHelpers.GetFirstSubsystem<T>();

// If multiple implementations of T are loaded, get all of them.
List<T> allOfThem = new List<T>();
GetAllRunningSubsystemsNonAlloc<T>(allOfThem);

Deskryptory

Różne implementacje podsystemu mogą mieć różne możliwości. Na przykład różne implementacje obiektu HandsSubsystem mogą określać ich możliwości raportowania danych fizycznych lub syntetyzowanych danych. Te informacje o możliwości są przechowywane w deskryptorze podsystemu i mogą być odpytywane pod kątem dowolnej danej implementacji.

// Get the first running hands subsystem.
var handsSubsystem = XRSubsystemHelpers.GetFirstRunningSubsystem<HandsSubsystem>();

// If we found one...
if (handsSubsystem != null)
{
    // Read the capability information off the implementation's descriptor.
    bool isPhysicalData = handsSubsystem.subsystemDescriptor.IsPhysicalData;
}

Profile

Nie należy mylić z profilami podsystemu MRTK 2.x, profile podsystemu MRTK3 to zasób dla platformy wdrażania, który definiuje, które podsystemy są tworzone i uruchamiane.

Profile podsystemu, jak pokazano w widoku ustawień projektu zestawu narzędzi MRTK.

Podsystemy, które mają odpowiednie pole wyboru, zostaną utworzone i uruchomione przez MRTKLifecycleManager program i będą miały wywoływane metody cyklu życia. Różne profile można przypisać do różnych celów wdrażania.

Pokazane tutaj podsystemy są określane przez zainstalowane pakiety. Jeśli pakiet nie jest zainstalowany, podsystemy skojarzone z tym pakietem nie będą wyświetlane w tym miejscu, a lista zostanie automatycznie odświeżona.

Pakiet MRTK v3 jest dostarczany wstępnie MRTKProfile . Jest to niezmienny zasób. Jeśli jednak chcesz utworzyć niestandardowy wybór podsystemów do uruchomienia, należy utworzyć zasób MRTKProfile w projekcie.

Tworzenie własnych podsystemów MRTK

Konfiguracja

Podsystemy można przypisywać do obiektów konfiguracji w celu dostosowania ich zachowania.

Konfigurowanie podsystemu

Te obiekty konfiguracji są dostępne z dowolnego miejsca za pośrednictwem interfejsu XRSubsystemHelpers API.

XRSubsystemHelpers.GetConfiguration<TConfig, TSubsystem>()

Podsystemy definiują, który typ konfiguracji ma zastosowanie do nich w ich MRTKSubsystemAttributepliku . Wraz z tym atrybut definiuje również kilka elementów metadanych wraz z konkretnymi typami zaimplementowanego dostawcy. Na przykład jest to atrybut używany przez podsystem agregatora rąk zestawu narzędzi MRTK.

[MRTKSubsystem(
        Name = "com.microsoft.mixedreality.hands",
        DisplayName = "MRTK Hands Aggregator Subsystem",
        Author = "Microsoft",
        ProviderType = typeof(MRTKAggregator),
        SubsystemTypeOverride = typeof(MRTKHandsAggregatorSubsystem),
        ConfigType = typeof(MRTKHandsAggregatorConfig))]

Podobnie jak w przypadku profilów, są udostępniane domyślne zasoby konfiguracji. Są one niezmienne i muszą zostać zduplikowane do projektu, aby można je było edytować. Nowy zasób można również utworzyć za pomocą menu tworzenia zasobu.

Menu tworzenia nowego zasobu