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.
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.
Konfiguráció
Az alrendszerek konfigurációs objektumokhoz rendelhetők a viselkedésük testreszabásához.
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.