Vytvoření vstupního systémového zprostředkovatele dat

Systém Mixed Reality Toolkit vstupů je rozšiřitelný systém pro povolení podpory vstupních zařízení. Pokud chcete přidat podporu pro novou hardwarovou platformu, může být vyžadován vlastní poskytovatel vstupních dat.

Tento článek popisuje, jak pro vstupní systém vytvořit vlastní zprostředkovatele dat, také nazývané správci zařízení. Zde zobrazený příklad kódu pochází z WindowsMixedRealityDeviceManager .

Úplný kód použitý v tomto příkladu najdete ve složce MRTK/Providers/WindowsMixedReality.

Struktura oboru názvů a složek

Poskytovatelé dat je možné distribuovat jako doplněk třetí strany nebo jako součást služby Microsoft Mixed Reality Toolkit. Schvalovací proces pro odesílání nových poskytovatelů dat do MRTK se bude v jednotlivých případech lišit a oznámí se v době prvotního návrhu.

Důležité

Pokud je vstupní systémový zprostředkovatel dat odeslán do úložiště Mixed Reality Toolkit, obor názvů musí začínat na Microsoft.MixedReality.Toolkit (např. Microsoft.MixedReality. Toolkit. WindowsMixedReality) a kód by měl být umístěný ve složce pod MRTK/Providers (např. MRTK/Providers/WindowsMixedReality).

Obor názvů

Poskytovatelé dat musí mít obor názvů pro zmírnění možných kolizí názvů. Doporučuje se, aby obor názvů obsahuje následující součásti.

  • Název firmy
  • Oblast funkce

Například vstupním poskytovatelem dat vytvořeným společností Contoso může být Contoso.MixedReality. Toolkit. Input(Vstup).

Doporučuje se, aby zdrojový kód pro zprostředkovatele dat byl rozložen v hierarchii složek, jak je znázorněno na následujícím obrázku.

Příklad struktury složek

Kde ContosoInput obsahuje implementaci zprostředkovatele dat, složka Editor obsahuje inspektor (a jakýkoli jiný kód specifický pro editor Unity), složka Textures obsahuje obrázky podporovaných kontrolerů a Profily obsahuje jeden nebo více předem provedených profilů.

Poznámka

Některé běžné image kontroleru najdete ve složce MixedRealityToolkit\StandardAssets\Textures.

Implementace poskytovatele dat

Určení dědičnosti rozhraní nebo základní třídy

Všichni zprostředkovatelé dat vstupního systému musí implementovat rozhraní, které určuje IMixedRealityInputDeviceManager minimální funkčnost vyžadované vstupním systémem. Základ MRTK obsahuje BaseInputDeviceManager třídu , která poskytuje výchozí implementaci této požadované funkce. Pro zařízení, která staví na třídě UInput Unity, lze třídu použít UnityJoystickManager jako základní třídu.

Poznámka

Třídy BaseInputDeviceManagerUnityJoystickManager a poskytují požadovanou IMixedRealityInputDeviceManager implementaci.

public class WindowsMixedRealityDeviceManager :
    BaseInputDeviceManager,
    IMixedRealityCapabilityCheck
{ }

IMixedRealityCapabilityCheck se používá k označení, že poskytuje podporu pro sadu vstupních funkcí, konkrétně pro articulované ruce, pohybové ruce a pohybové WindowsMixedRealityDeviceManager ovladače.

Použití atributu MixedRealityDataProvider

Klíčovým krokem při vytváření vstupního systémového zprostředkovatele dat je použití MixedRealityDataProvider atributu na třídu . Tento krok povolí nastavení výchozího profilu a platforem pro poskytovatele, pokud je vybraný ve vstupním profilu systému.

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

Implementace metod IMixedRealityDataProvider

Jakmile je třída definovaná, dalším krokem je poskytnutí implementace IMixedRealityDataProvider rozhraní.

Poznámka

Třída BaseInputDeviceManager prostřednictvím třídy poskytuje pouze prázdné implementace BaseServiceIMixedRealityDataProvider metod. Podrobnosti o těchto metodách jsou obecně specifické pro poskytovatele dat.

Zprostředkovatel dat by měl implementovat tyto metody:

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

Implementace logiky zprostředkovatele dat

Dalším krokem je přidání logiky pro správu vstupních zařízení, včetně všech řadičů, které se budou podporovat.

Implementace tříd kontroleru

Příklad definuje WindowsMixedRealityDeviceManager a implementuje následující třídy kontroleru.

Zdrojový kód každé z těchto tříd najdete ve složce MRTK/Providers/WindowsMixedReality.

  • WindowsMixedRealityArticulatedHand.cs
  • WindowsMixedRealityController.cs
  • WindowsMixedRealityGGVHand.cs

Poznámka

Ne všichni správci zařízení budou podporovat více typů kontroleru.

Použití atributu MixedRealityController

Dále aplikujte MixedRealityController atribut na třídu . Tento atribut určuje typ kontroleru (např. articulated hand), rukou (např. vlevo nebo vpravo) a volitelný obrázek kontroleru.

[MixedRealityController(
    SupportedControllerType.WindowsMixedReality,
    new[] { Handedness.Left, Handedness.Right },
    "StandardAssets/Textures/MotionController")]
{ }

Konfigurace mapování interakcí

Dalším krokem je definování sady mapování interakcí podporovaných kontroleru. U zařízení, která přijímají data prostřednictvím třídy Input Unity, je nástroj pro mapování kontroleru užitečným zdrojem potvrzení správné mapování os a tlačítek pro přiřazení k interakci.

Následující příklad je zkrácený z třídy GenericOpenVRController , která se nachází ve složce MRTK/Providers/OpenVR.

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),
};

Poznámka

Třída ControllerMappingLibrary poskytuje symbolické konstanty pro definici vstupní osy a tlačítek Unity.

Vyvolávání událostí oznámení

Aby aplikace reagovaly na vstup od uživatele, vyvolá poskytovatel dat události oznámení odpovídající změnám stavu kontroleru, jak jsou definovány v IMixedRealityInputHandler rozhraních IMixedRealityInputHandler<T> a .

U ovládacích prvků digitálního typu (tlačítko) zvyšte události OnInputDown a OnInputUp.

// inputAction is the input event that is to be raised.
if (interactionSourceState.touchpadPressed)
{
    InputSystem?.RaiseOnInputDown(InputSource, ControllerHandedness, inputAction);
}
else
{
    InputSystem?.RaiseOnInputUp(InputSource, ControllerHandedness, inputAction);
}

U analogů ovládacích prvků (např. pozice touchpadu) by se měla zvýšit událost InputChanged.

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

Přidání instrumentace Unity Profileru

Výkon je v aplikacích hybridní reality kritický. Každá komponenta přidává určité režijní náklady, které musí aplikace zohlednit. Proto je důležité, aby všichni zprostředkovatelé vstupních dat obsahovali instrumentaci Unity Profileru ve vnitřní smyčce a často využívované cesty kódu.

Při instrumentování vlastních poskytovatelů se doporučuje implementovat vzor, který využívá MRTK.

        private static readonly ProfilerMarker GetOrAddControllerPerfMarker = new ProfilerMarker("[MRTK] WindowsMixedRealityDeviceManager.GetOrAddController");

        private async void GetOrAddController(InteractionSourceState interactionSourceState)
        {
            using (GetOrAddControllerPerfMarker.Auto())
            {
                // Code to be measured.
            }
        }

Poznámka

Název použitý k identifikaci značky profileru je libovolný. MrTK používá následující vzor.

"[product] className.methodName – nepovinná poznámka

Doporučujeme, aby vlastní zprostředkovatelé dat postupovali podobným způsobem, který pomáhá zjednodušit identifikaci konkrétních komponent a metod při analýze trasování.

Vytvoření profilu a inspektoru

V Mixed Reality Toolkit se zprostředkovatelé dat konfigurovali pomocí profilů.

Poskytovatelé dat s dalšími možnostmi konfigurace (např. InputSimulationService)by měli vytvořit profil a inspektor, který zákazníkům umožní upravit chování tak, aby co nejlépe vyhovovalo potřebám aplikace.

Úplný kód pro příklad v této části najdete v mrtk. Složka Services/InputSimulation.

Definování profilu

Obsah profilu by měl zrcadlit přístupné vlastnosti pozorovatele (např. interval aktualizace). Všechny konfigurovatelné vlastnosti uživatele definované v jednotlivých rozhraních by měly být součástí profilu.

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

Atribut lze použít na třídu profilu, aby zákazníci mohli vytvořit instanci profilu pomocí nabídky Vytvořit CreateAssetMenuCreateAssetMenu

Implementace inspektoru

Inspektoři profilů jsou uživatelské rozhraní pro konfiguraci a zobrazení obsahu profilu. Každý inspektor profilů by měl rozšířit třídu BaseMixedRealityToolkitConfigurationProfileInspector.

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

Atribut CustomEditor informuje Unity o typu aktiva, na který se vztahuje inspektor.

Vytvoření definic sestavení

Aplikace Mixed Reality Toolkit soubory definice sestavení (.asmdef) k určení závislostí mezi komponentami a také k pomoc Unity při zkrácení doby kompilace.

Doporučuje se, aby definiční soubory sestavení byly vytvořeny pro všechny zprostředkovatele dat a jejich součásti editoru.

Při použití struktury složek v předchozím příkladu by pro zprostředkovatele dat ContosoInput byly dva soubory .asmdef.

První definice sestavení je zprostředkovatel dat. V tomto příkladu bude mít název ContosoInput a bude umístěn ve složce ContosoInput v tomto příkladu. Tato definice sestavení musí určit závislost na Microsoft.MixedReality. Toolkit a další sestavení, na kterých závisí.

Definice sestavení ContosoInputEditor bude specifikovat inspektor profilu a jakýkoli kód specifický pro editor. Tento soubor musí být umístěn v kořenové složce kódu editoru. V tomto příkladu se soubor nachází ve složce ContosoInput\Editor. Tato definice sestavení bude obsahovat odkaz na sestavení ContosoInput a také:

  • Microsoft.MixedReality. Toolkit
  • Microsoft.MixedReality. Toolkit. Editor.Inspectors
  • Microsoft.MixedReality. Toolkit. Editor.Utilities

Registrace poskytovatele dat

Po vytvoření je možné poskytovatele dat zaregistrovat ve vstupním systému a použít ho v aplikaci.

Registrovaní zprostředkovatelé dat vstupního systému

Balení a distribuce

Poskytovatelé dat, kteří jsou distribuováni jako komponenty třetích stran, mají specifické podrobnosti o balení a distribuci předchycené vývojáři. Nejběžnějším řešením bude pravděpodobně vygenerování balíčku .unitypackage a distribuce prostřednictvím úložiště prostředků Unity.

Pokud je poskytovatel dat odeslán a přijat jako součást balíčku Microsoft Mixed Reality Toolkit, tým Microsoft MRTK ho zabalí a distribuuje jako součást nabídek MRTK.

Viz také