Megosztás a következőn keresztül:


Alrendszerek – MRTK3

Az MRTK3 a Unity XR alrendszerkezelési infrastruktúráját használja ki bővíthető modulok írásához, amelyek platformfüggetlen támogatást nyújtanak olyan funkciókhoz, mint a beszéd- és kézkövetés. Ezeket az alrendszereket a Unity inicializálja és betölti a meglévő, natív Unity-alrendszerekkel együtt, például XRMeshSubsystem és XRInputSubsystem. Tekintse meg a Unity-alrendszerek működését ismertető dokumentációt.

Filozófia

Az MRTK v2-ben a "szolgáltatások" magukban a jelenetben biztosították a funkciók nagy részét. Példányosítanák az objektumokat, áthelyeznék az objektumokat, frissítenék a jelenethierarchiát stb. Az MRTK3-ban az alrendszerek nem módosítják explicit módon a jelenetet. Az MRTK3 alrendszerek moduláris adat-, információ- vagy eseményszolgáltatói, vagy számításokat végeznek a végfelhasználók számára. Ha a jelenetben valaminek meg kell változnia, vagy az adatbevitel alapján kell cselekednie, az adatokhoz külön jelenetalapú vizualizációs összetevőnek kell lennie. Ez a felosztás biztosítja, hogy az alrendszerek nem rombolják a jelenetváltozásokat, és nem okoznak jelenettel kapcsolatos mellékhatásokat.

Míg az MRTK v2 a bemenetek feldolgozására használt rendszereket és szolgáltatásokat, az MRTK3 általában az OpenXR és a Unity bemeneti rendszert használja a platformfüggetlen bemenetekhez. Egyes adattípusokat azonban még nem csomagol be a bemeneti rendszer. Ezekben az esetekben platformfüggetlen interfészeket biztosítunk az alrendszereinken keresztül.

AZ MRTK alrendszer életciklusa

A Unity infrastruktúrájában található alrendszerdefiníciók egyszerű életciklus-metódusokat kínálnak, például Start, Stopés Destroy. Ezt a definíciót kibővítjük olyan hasznos "tick" metódusokkal, mint a Update, LateUpdateés FixedUpdate. Az életciklus-felületet megvalósító alrendszereket felügyeljük MRTKLifecycleManager . Ez az életciklus-kezelő az egyetlen MonoBehaviour, amely részt vesz az alrendszerarchitektúrában; Ez bárhol elhelyezhető a helyszínen, de hajlamosak vagyunk valahol a rig-on hagyni.

Lekérdezés

Az alrendszer-implementáció lekérdezése egyszerű és nagy teljesítményű.

// 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);

Leírók

Az alrendszerek különböző implementációi különböző képességekkel rendelkezhetnek. A különböző implementációk HandsSubsystem például megadhatja a fizikai adatok vagy szintetizált adatok jelentésére vonatkozó képességüket. Ezek a képességadatok az alrendszerleíróban vannak tárolva, és lekérdezhetők az adott implementációkhoz.

// 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;
}

Profilok

Nem tévesztendő össze az MRTK 2.x profiljaival, az MRTK3 alrendszerprofilok üzembehelyezési platformonkénti objektumok, amelyek meghatározzák, hogy mely alrendszerek jönnek létre és indulnak el.

Alrendszerprofilok az MRTK projektbeállítások nézetében látható módon.

Azoknak az alrendszereknek a létrehozását és elindítását MRTKLifecycleManager végzi, amelyekhez a megfelelő jelölőnégyzet be van jelölve, és az életciklus-metódusokat is meghívja. A különböző profilok különböző üzembehelyezési célokhoz rendelhetők hozzá.

Az itt látható alrendszereket a telepített csomagok határozzák meg. Ha nincs telepítve csomag, a csomaghoz társított alrendszerek nem jelennek meg itt, és a lista automatikusan frissül.

Az MRTK v3 csomag részeként egy előre elkészített MRTKProfile csomag található. Ez egy nem módosítható eszköz. Ha azonban a futtatandó alrendszerek egyéni kiválasztását szeretné létrehozni, akkor az objektumot a MRTKProfile projekten belül kell létrehoznia.

Saját MRTK-alrendszerek létrehozása

Konfiguráció

Az alrendszerek konfigurációs objektumokhoz rendelhetők a viselkedésük testreszabásához.

Alrendszer konfigurálása

Ezek a konfigurációs objektumok bárhonnan elérhetők az XRSubsystemHelpers API-val.

XRSubsystemHelpers.GetConfiguration<TConfig, TSubsystem>()

Az alrendszerek határozzák meg, hogy melyik konfigurációtípus releváns számukra a saját fájljukban MRTKSubsystemAttribute. Ezzel együtt az attribútum több metaadatot is meghatároz, valamint a implementált szolgáltató konkrét típusait. Ez például az az attribútum, amelyet az MRTK Hands Aggregator alrendszer használ.

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

A profilokhoz hasonlóan az alapértelmezett konfigurációs eszközök is meg vannak adva. Nem módosíthatók, és a szerkesztéshez duplikálni kell őket a projektben. Új objektumot az eszközlétrehozás menüben is létrehozhat.

Új objektumlétrehozás menü