Bemenetirendszer-adatszolgáltató létrehozása – MRTK2
A Mixed Reality Eszközkészlet bemeneti rendszere egy bővíthető rendszer a bemeneti eszközök támogatásának engedélyezéséhez. Egy új hardverplatform támogatásának hozzáadásához szükség lehet egy egyéni bemeneti adatszolgáltatóra.
Ez a cikk bemutatja, hogyan hozhat létre egyéni adatszolgáltatókat, más néven eszközkezelőket a bemeneti rendszerhez. Az itt látható példakód a következőből származik WindowsMixedRealityDeviceManager
: .
Az ebben a példában használt teljes kód az MRTK/Providers/WindowsMixedReality mappában található.
Névtér és mappastruktúra
Az adatszolgáltatók harmadik féltől származó bővítményként vagy a Microsoft Mixed Reality Toolkit részeként terjeszthetők. Az új adatszolgáltatók MRTK-hoz való benyújtásának jóváhagyási folyamata eseti alapon változik, és az eredeti javaslat időpontjában lesz közölve.
Fontos
Ha egy bemenetirendszer-adatszolgáltatót küld a Mixed Reality Toolkit-adattárba, a névtérnek a Microsoft.MixedReality.Toolkit (pl. Microsoft.MixedReality.Toolkit.WindowsMixedReality) kifejezéssel kell kezdődnie, és a kódnak egy, az MRTK/Providers (például: MRTK/Providers/WindowsMixedReality) alatti mappában kell lennie.
Névtér
Az adatszolgáltatóknak névtérrel kell rendelkezniük a lehetséges névütközések mérsékléséhez. Javasoljuk, hogy a névtér tartalmazza a következő összetevőket.
- Cég neve
- Funkcióterület
A Contoso vállalat által létrehozott bemeneti adatszolgáltató lehet például "Contoso.MixedReality.Toolkit.Input".
Ajánlott mappastruktúra
Javasoljuk, hogy az adatszolgáltatók forráskódját egy mappahierarchiában helyezze el, az alábbi képen látható módon.
Ahol a ContosoInput az adatszolgáltató implementációját tartalmazza, a Szerkesztő mappában található az inspector (és bármely más Unity-szerkesztőspecifikus kód), a Textures mappa a támogatott vezérlők képeit, a Profiles pedig egy vagy több előre elkészített profilt tartalmaz.
Megjegyzés
Néhány gyakori vezérlőlemezkép a MixedRealityToolkit\StandardAssets\Textures mappában található.
Az adatszolgáltató implementálása
Interfész és/vagy alaposztályöröklés megadása
Minden bemenetirendszer-adatszolgáltatónak implementálnia kell az IMixedRealityInputDeviceManager
interfészt, amely meghatározza a bemeneti rendszer által igényelt minimális funkcionalitást. Az MRTK-alaprendszer tartalmazza azt a BaseInputDeviceManager
osztályt, amely a szükséges funkciók alapértelmezett implementálását biztosítja. A Unity UInput osztályára épülő eszközök esetében az UnityJoystickManager
osztály használható alaposztályként.
Megjegyzés
A BaseInputDeviceManager
és UnityJoystickManager
az osztály biztosítja a szükséges IMixedRealityInputDeviceManager
megvalósítást.
public class WindowsMixedRealityDeviceManager :
BaseInputDeviceManager,
IMixedRealityCapabilityCheck
{ }
IMixedRealityCapabilityCheck
a segítségévelWindowsMixedRealityDeviceManager
jelezheti, hogy támogatja a beviteli képességek egy csoportját, különösen a csuklós kezeket, a tekintet-kézmozdulat-hang kezeket és a mozgásvezérlőket.
A MixedRealityDataProvider attribútum alkalmazása
A bemenetirendszer-adatszolgáltató létrehozásának egyik fő lépése az MixedRealityDataProvider
attribútum alkalmazása az osztályra. Ez a lépés lehetővé teszi a szolgáltató alapértelmezett profiljának és platformjának beállítását, ha a bemenetirendszer-profilban van kiválasztva.
[MixedRealityDataProvider(
typeof(IMixedRealityInputSystem),
SupportedPlatforms.WindowsUniversal,
"Windows Mixed Reality Device Manager")]
public class WindowsMixedRealityDeviceManager :
BaseInputDeviceManager,
IMixedRealityCapabilityCheck
{ }
Az IMixedRealityDataProvider metódusok implementálása
A osztály definiálása után a következő lépés az interfész implementálásának IMixedRealityDataProvider
biztosítása.
Megjegyzés
A BaseInputDeviceManager
osztály a BaseService
osztályon keresztül csak üres implementációkat biztosít a IMixedRealityDataProvider
metódusokhoz. Ezeknek a módszereknek a részletei általában adatszolgáltató-specifikusak.
Az adatszolgáltató által implementálandó módszerek a következők:
Destroy()
Disable()
Enable()
Initialize()
Reset()
Update()
Az adatszolgáltatói logika megvalósítása
A következő lépés a bemeneti eszközök kezelésére szolgáló logika hozzáadása, beleértve a támogatni kívánt vezérlőket is.
A vezérlőosztályok implementálása
A példa a WindowsMixedRealityDeviceManager
következő vezérlőosztályokat definiálja és valósítja meg.
Az egyes osztályok forráskódja az MRTK/Providers/WindowsMixedReality mappában található.
- WindowsMixedRealityArticulatedHand.cs
- WindowsMixedRealityController.cs
- WindowsMixedRealityGGVHand.cs
Megjegyzés
Nem minden eszközkezelő támogat több vezérlőtípust.
A MixedRealityController attribútum alkalmazása
Ezután alkalmazza az MixedRealityController
attribútumot a osztályra. Ez az attribútum határozza meg a vezérlő típusát (pl. csuklós kéz), a kezességet (pl. balra vagy jobbra) és egy opcionális vezérlőrendszerképet.
[MixedRealityController(
SupportedControllerType.WindowsMixedReality,
new[] { Handedness.Left, Handedness.Right },
"StandardAssets/Textures/MotionController")]
{ }
Az interakció-leképezések konfigurálása
A következő lépés a vezérlő által támogatott interakció-leképezések halmazának meghatározása. Azon eszközök esetében, amelyek a Unity Input osztályán keresztül kapják meg az adataikat, a vezérlőleképezési eszköz hasznos erőforrás a megfelelő tengely- és gombleképezések megerősítéséhez az interakciókhoz való hozzárendeléshez.
Az alábbi példa az MRTK/Providers/OpenVR mappában található osztály rövidítése GenericOpenVRController
.
public override MixedRealityInteractionMapping[] DefaultLeftHandedInteractions => new[]
{
// Controller Pose
new MixedRealityInteractionMapping(0, "Spatial Pointer", AxisType.SixDof, DeviceInputType.SpatialPointer, MixedRealityInputAction.None),
// Left Trigger Squeeze
new MixedRealityInteractionMapping(1, "Trigger Position", AxisType.SingleAxis, DeviceInputType.Trigger, ControllerMappingLibrary.AXIS_9),
// Left Trigger Press (Select)
new MixedRealityInteractionMapping(2, "Trigger Press (Select)", AxisType.Digital, DeviceInputType.TriggerPress, KeyCode.JoystickButton14),
};
Megjegyzés
A ControllerMappingLibrary
osztály szimbolikus állandókat biztosít a Unity bemeneti tengelyéhez és a gombdefiníciókhoz.
Értesítési események létrehozása
Annak érdekében, hogy az alkalmazások válaszolhassanak a felhasználótól érkező adatokra, az adatszolgáltató a vezérlő állapotváltozásainak megfelelő értesítési eseményeket hoz létre a és IMixedRealityInputHandler<T>
interfészekben IMixedRealityInputHandler
meghatározottak szerint.
A digitális (gombos) típusvezérlők esetében adja meg az OnInputDown és az OnInputUp eseményeket.
// inputAction is the input event that is to be raised.
if (interactionSourceState.touchpadPressed)
{
InputSystem?.RaiseOnInputDown(InputSource, ControllerHandedness, inputAction);
}
else
{
InputSystem?.RaiseOnInputUp(InputSource, ControllerHandedness, inputAction);
}
Analóg vezérlők (pl. érintőpárnák) esetén az InputChanged eseményt kell emelni.
InputSystem?.RaisePositionInputChanged(InputSource, ControllerHandedness, interactionMapping.MixedRealityInputAction, interactionSourceState.touchpadPosition);
Unity Profiler-kialakítás hozzáadása
A teljesítmény kritikus fontosságú a vegyes valóságú alkalmazásokban. Minden összetevő olyan többletterhelést ad hozzá, amelyet az alkalmazásoknak figyelembe kell vennie. Ezért fontos, hogy minden bemeneti adatszolgáltató tartalmazza a Unity Profiler rendszerállapotát a belső hurokban, valamint a gyakran használt kódútvonalakat.
Egyéni szolgáltatók kialakításakor ajánlott implementálni az MRTK által használt mintát.
private static readonly ProfilerMarker GetOrAddControllerPerfMarker = new ProfilerMarker("[MRTK] WindowsMixedRealityDeviceManager.GetOrAddController");
private async void GetOrAddController(InteractionSourceState interactionSourceState)
{
using (GetOrAddControllerPerfMarker.Auto())
{
// Code to be measured.
}
}
Megjegyzés
A profilkészítő jelölő azonosításához használt név tetszőleges. Az MRTK a következő mintát használja.
"[product] className.methodName – nem kötelező megjegyzés"
Javasoljuk, hogy az egyéni adatszolgáltatók hasonló mintát kövessenek, hogy megkönnyítsék bizonyos összetevők és módszerek azonosítását a nyomkövetések elemzésekor.
A profil és az ellenőr létrehozása
Az Mixed Reality Toolkitben az adatszolgáltatók profilok használatával vannak konfigurálva.
A további konfigurációs lehetőségekkel (például : InputSimulationService) rendelkező adatszolgáltatóknak létre kell hozniuk egy profilt és egy felügyelőt, amely lehetővé teszi az ügyfelek számára, hogy az alkalmazás igényeinek leginkább megfelelő módon módosítsák a viselkedést.
Az ebben a szakaszban szereplő példa teljes kódja az MRTK-ban található. Services/InputSimulation mappa.
Profil definiálása
A profil tartalmának tükröznie kell a megfigyelő elérhető tulajdonságait (pl. frissítési időköz). Az egyes felületeken definiált összes felhasználó által konfigurálható tulajdonságnak tartalmaznia kell a profilt.
[CreateAssetMenu(
menuName = "Mixed Reality Toolkit/Profiles/Mixed Reality Simulated Input Profile",
fileName = "MixedRealityInputSimulationProfile",
order = (int)CreateProfileMenuItemIndices.InputSimulation)]
public class MixedRealityInputSimulationProfile : BaseMixedRealityProfile
{ }
Az CreateAssetMenu
attribútum alkalmazható a profilosztályra, hogy az ügyfelek profilpéldányt hozzanak létre az Eszközök > létrehozása > Mixed Reality Eszközkészletprofilok > menü használatával.
Az ellenőr implementálása
A profilfelügyelők a profil tartalmának konfigurálására és megtekintésére szolgáló felhasználói felület. Minden profilfelügyelőnek ki kell terjesztenie a "BaseMixedRealityToolkitConfigurationProfileInspector osztályt.
[CustomEditor(typeof(MixedRealityInputSimulationProfile))]
public class MixedRealityInputSimulationProfileInspector : BaseMixedRealityToolkitConfigurationProfileInspector
{ }
Az CustomEditor
attribútum tájékoztatja a Unityt arról, hogy milyen típusú objektumra vonatkozik az ellenőr.
Szerelvénydefiníció(k) létrehozása
Mixed Reality Eszközkészlet szerelvénydefiníciós (.asmdef) fájlokat használ az összetevők közötti függőségek meghatározásához, valamint a Unity segít a fordítási idő csökkentésében.
Javasoljuk, hogy a szerelvénydefiníciós fájlokat az összes adatszolgáltatóhoz és azok szerkesztőösszetevőihez hozza létre.
A korábbi példában a mappastruktúrát használva két .asmdef fájl lenne a ContosoInput adatszolgáltatóhoz.
Az első szerelvénydefiníció az adatszolgáltatóhoz tartozik. Ebben a példában ContosoInput néven jelenik meg, és a példa ContosoInput mappájában található. Ennek a szerelvénydefiníciónak meg kell adnia a Microsoft.MixedReality.Toolkit és minden más olyan szerelvény függőségét, amelytől függ.
A ContosoInputEditor szerelvénydefiníciója határozza meg a profilfelügyelőt és a szerkesztőspecifikus kódot. A fájlnak a szerkesztőkód gyökérmappájában kell lennie. Ebben a példában a fájl a ContosoInput\Editor mappában található. Ez a szerelvénydefiníció a ContosoInput szerelvényre mutató hivatkozást, valamint a következőket tartalmazza:
- Microsoft.MixedReality.Toolkit
- Microsoft.MixedReality.Toolkit.Editor.Inspectors
- Microsoft.MixedReality.Toolkit.Editor.Utilities
Az adatszolgáltató regisztrálása
A létrehozás után az adatszolgáltató regisztrálható a bemeneti rendszeren, és használható az alkalmazásban.
Csomagolás és elosztás
A harmadik féltől származó összetevőkként elosztott adatszolgáltatók a csomagolás és a terjesztés részleteit a fejlesztő előnyben részesítése szerint tekintik meg. Valószínű, hogy a leggyakoribb megoldás egy .unitypackage létrehozása és terjesztése a Unity Asset Store-on keresztül.
Ha egy adatszolgáltatót a Microsoft Mixed Reality Toolkit csomag részeként küld el és fogad el, a Microsoft MRTK csapata az MRTK-ajánlatok részeként csomagolja és terjeszti azt.