Bemeneti rendszeradat-szolgáltató létrehozása

A Mixed Reality eszközkészlet beviteli rendszere egy olyan, extenzható rendszer, amely lehetővé teszi a bemeneti eszközök támogatását. Egy új hardverplatform támogatásához egyéni bemeneti adatszolgáltatóra lehet szükség.

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 WindowsMixedRealityDeviceManager származik: .

A példában használt teljes kód megtalálható az MRTK/Providers/WindowsMixedReality mappában.

Névtér és mappastruktúra

Az adatszolgáltatók terjeszthetőek harmadik féltől származó bővítményként vagy a Microsoft Mixed Reality részeként. Az új adatszolgáltatók MRTK-hoz való beküldési folyamata esetenként változik, és az eredeti javaslatkor lesz továbbítva.

Fontos

Ha egy bemeneti rendszeradat-szolgáltatót ad a Mixed Reality Toolkitadattárába, a névtérnek a Microsoft.MixedReality.Toolkittel kell kezdődnie (pl. Microsoft.MixedReality.Toolkit.WindowsMixedReality), és a kódot egy, az MRTK/Providers alatti mappában kell elhelyezni (például MRTK/Providers/WindowsMixedReality).

Névtér

Az adatszolgáltatóknak névtérre van szüksége a lehetséges névütközések mérséklése érdekében. Javasoljuk, hogy a névtér a következő összetevőket tartalmazza.

  • Cég neve
  • Jellemzőterület

A Contoso vállalat által létrehozott bemenetiadat-szolgáltató lehet például a "Contoso.MixedReality.Toolkit.Input".

Javasoljuk, hogy az adatszolgáltatók forráskódját a következő képen látható módon egy mappahierarchiába rendezi.

Példamappa szerkezete

Ahol a ContosoInput tartalmazza az adatszolgáltató implementációját, az Editor mappa tartalmazza az vizsgálót (és bármely más Unity-szerkesztőspecifikus kódot), a Textures mappa a támogatott vezérlők képeit, a Profiles pedig egy vagy több előre készített profilt.

Megjegyzés

Néhány gyakori vezérlőkép a MixedRealityToolkit\StandardAssets\Textúra mappában található.

Az adatszolgáltató implementálja

Interfész és/vagy alaposztály öröklésének megadása

Minden bemenetirendszer-adatszolgáltatónak implementálnunk kell a interfészt, amely meghatározza a bemeneti rendszer által minimálisan IMixedRealityInputDeviceManager szükséges funkciókat. Az MRTK alaposztály tartalmazza a osztályt, amely a szükséges funkciók BaseInputDeviceManager alapértelmezett implementációját biztosítja. A Unity UInput osztályán túli eszközök esetében a osztály használható UnityJoystickManager alaposztályként.

Megjegyzés

A BaseInputDeviceManager és az osztály biztosítja a szükséges UnityJoystickManagerIMixedRealityInputDeviceManager implementációt.

public class WindowsMixedRealityDeviceManager :
    BaseInputDeviceManager,
    IMixedRealityCapabilityCheck
{ }

IMixedRealityCapabilityCheck A a használatával jelzi, hogy támogatja a bemeneti képességeket, különösen a WindowsMixedRealityDeviceManager kézeket, a tekintet-kézmozdulatokat hangvezérlést é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 attribútum alkalmazása a MixedRealityDataProvider 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 be van jelölve a bemeneti rendszerprofilban.

[MixedRealityDataProvider(
    typeof(IMixedRealityInputSystem),
    SupportedPlatforms.WindowsUniversal,
    "Windows Mixed Reality Device Manager")]
public class WindowsMixedRealityDeviceManager :
    BaseInputDeviceManager,
    IMixedRealityCapabilityCheck
{ }

Az IMixedRealityDataProvider metódusok implementálva

Az osztály definiálás után a következő lépés az interfész IMixedRealityDataProvider implementációja.

Megjegyzés

A osztály a osztályon keresztül BaseInputDeviceManager csak üres BaseService implementációkat biztosít a IMixedRealityDataProvider metódusok számára. Ezeknek a módszereknek a részletei általában adatszolgáltató-specifikusak.

Az adatszolgáltatónak a következő metódusokat kell megvalósítania:

  • Destroy()
  • Disable()
  • Enable()
  • Initialize()
  • Reset()
  • Update()

Az adatszolgáltató logikájának megvalósítása

A következő lépés a bemeneti eszközök kezelésének logikájának hozzáadása, beleértve a támogatott vezérlőket is.

A vezérlőosztályok implementálva

A példa a következő vezérlőosztályokat definiálja WindowsMixedRealityDeviceManager é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ő fog több vezérlőtípust támogatni.

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 (például: kézzel ékelhető), a kéz(et) (például bal vagy jobb) és egy opcionális vezérlőké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ós leképezések meghatározása. Az olyan 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 forrás, amely segít megerősíteni a megfelelő tengely- és gombleképezéseket az interakciókhoz való hozzárendeléshez.

Az alábbi példa az MRTK/Providers/OpenVR mappában található osztályból GenericOpenVRController rövidítve van.

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 osztály szimbolikus állandókat biztosít a Unity bemeneti ControllerMappingLibrary tengelyéhez és gombdefinícióihoz.

Értesítési események bejelentése

Annak érdekében, hogy az alkalmazások reagáljanak a felhasználó bemenetére, az adatszolgáltató a vezérlő állapotváltozásait a és a felületeken meghatározott IMixedRealityInputHandler értesítési IMixedRealityInputHandler<T> eseményeknek megfelelően adja ki.

A digitális (gomb) típusú vezérlőknél növelje 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);
}

Az analóg vezérlők (például az érintőpad pozíciója) esetén az InputChanged eseményt kell emelni.

InputSystem?.RaisePositionInputChanged(InputSource, ControllerHandedness, interactionMapping.MixedRealityInputAction, interactionSourceState.touchpadPosition);

Unity Profiler-rendszerkialakítás hozzáadása

A teljesítmény kritikus fontosságú a vegyes valóságú alkalmazásokban. Minden összetevő többletterhelést okoz, amelyet az alkalmazásoknak figyelembe kell venniük. Ebből a célból fontos, hogy minden bemeneti adatszolgáltató belső hurkban tartalmazza a Unity Profiler-rendszerkialakítást és a gyakran használt kódútvonalakat.

Javasoljuk, hogy az MRTK által az egyéni szolgáltatók rendszerezésekor használt mintát implementálja.

        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 Profiler-jelölő azonosítására használt név tetszőleges. Az MRTK a következő mintát használja.

"[product] className.methodName - optional note"

Javasoljuk, hogy a nyomkövetések elemzésekor az egyéni adatszolgáltatók hasonló mintát kövessenek az egyes összetevők és metódusok egyszerűbb azonosítása érdekében.

A profil és az inspector létrehozása

A Mixed Reality eszközkészletben az adatszolgáltatók profilok használatával vannak konfigurálva.

A további konfigurációs beállításokkal (például: InputSimulationService)az adatszolgáltatóknak létre kell hozniuk egy profilt és egy vizsgálót, hogy az ügyfelek az alkalmazás igényeinek megfelelően módosítsák a viselkedést.

Az ebben a szakaszban található példa teljes kódja megtalálható az MRTK-ban. Services/InputSimulation mappa.

A profil meghatározása

A profil tartalmának tükrözni kell a megfigyelő elérhető tulajdonságait (például frissítési időköz). A profilnak az egyes felületeken definiált összes felhasználó által konfigurálható tulajdonságot tartalmazni kell.

[CreateAssetMenu(
    menuName = "Mixed Reality Toolkit/Profiles/Mixed Reality Simulated Input Profile",
    fileName = "MixedRealityInputSimulationProfile",
    order = (int)CreateProfileMenuItemIndices.InputSimulation)]
public class MixedRealityInputSimulationProfile : BaseMixedRealityProfile
{ }

Az attribútum alkalmazható a profilosztályra, így az ügyfelek létrehozhatnak egy profilpéldányt az Eszközök létrehozása CreateAssetMenuCreateAssetMenu

Az vizsgáló implementálja

A profil vizsgálói a profil tartalmának konfigurálásához és megtekintéséhez a felhasználói felület. Minden profilvizsgálónak ki kell terjesztenie a BaseMixedRealityToolkitConfigurationProfileInspector osztályt.

[CustomEditor(typeof(MixedRealityInputSimulationProfile))]
public class MixedRealityInputSimulationProfileInspector : BaseMixedRealityToolkitConfigurationProfileInspector
{ }

A CustomEditor attribútum tájékoztatja a Unityt az objektumtípusról, amelyre a vizsgáló vonatkozik.

Szerelvénydefiníció(k) létrehozása

A Mixed Reality eszközkészlet szerelvénydefiníciós (.asmdef) fájlokat használ az összetevők közötti függőségek megadá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 minden adatszolgáltatóhoz és azok szerkesztőösszetevőihez létre kell hozva.

Az 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 való. Ebben a példában a neve ContosoInput lesz, és a példában található ContosoInput mappában található. Ennek a szerelvény-definíciónak függőséget kell megadnia a Microsoft.MixedReality.Toolkittől és minden más szerelvénytől, amelytől függ.

A ContosoInputEditor szerelvénydefiníció megadja a profil vizsgálóját és az összes szerkesztőspecifikus kódot. Ennek a fájlnak a szerkesztőkód gyökérmappában kell lennie. Ebben a példában a fájl a ContosoInput\Editor mappában található. Ez a szerelvénydefiníció tartalmazni fog egy hivatkozást a ContosoInput szerelvényre, valamint a következőket:

  • 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 rendszerben, és használható az alkalmazásban.

Regisztrált bemenetirendszer-adatszolgáltatók

Csomagolás és terjesztés

A harmadik féltől származó összetevőkként terjesztett adatszolgáltatók a fejlesztőnek osztják ki a csomagolás és a disztribúció konkrét részleteit. Valószínű, hogy a leggyakoribb megoldás egy .unitypackage létrehozása és terjesztése a Unity Asset Store-on keresztül.

Ha a Microsoft Mixed Reality Toolkit csomag részeként elküld és elfogad egy adatszolgáltatót, a Microsoft MRTK csapata becsomagolja és terjeszti azt az MRTK-ajánlatok részeként.

Lásd még