Vytvoření zprostředkovatele dat vstupního systému – MRTK2

Vstupní systém Mixed Reality Toolkit 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í zprostředkovatel vstupních dat.

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

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

Obor názvů a struktura složek

Poskytovatelé dat mohou být distribuováni jako doplněk třetí strany nebo jako součást sady Microsoft Mixed Reality Toolkit. Postup schvalování pro předložení nových poskytovatelů údajů MRTK se bude případ od případu lišit a bude oznámen v okamžiku původního návrhu.

Důležité

Pokud se poskytovatel dat vstupního systému odesílá do úložiště Mixed Reality Toolkit, musí obor názvů začínat na Microsoft.MixedReality.Toolkit (např. Microsoft.MixedReality.Toolkit.WindowsMixedReality) a kód by se měl nacházet ve složce pod MRTK/Providers (např. MRTK/Providers/WindowsMixedReality).

Obor názvů

Poskytovatelé dat musí mít obor názvů, aby se zmírnily případné kolize názvů. Doporučuje se, aby obor názvů zahrnoval následující komponenty.

  • Název firmy
  • Oblast funkce

Například zprostředkovatel vstupních dat vytvořený společností Contoso může být Contoso.MixedReality.Toolkit.Input.

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

Příklad struktury složek

Tam, 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 vytvořených profilů.

Poznámka

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

Implementace zprostředkovatele dat

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

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

Poznámka

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

public class WindowsMixedRealityDeviceManager :
    BaseInputDeviceManager,
    IMixedRealityCapabilityCheck
{ }

IMixedRealityCapabilityCheck se používá WindowsMixedRealityDeviceManager k označení, že poskytuje podporu pro sadu vstupních funkcí, konkrétně pro artikulované ruce, ruce gesto-hlas pohledu a ovladače pohybu.

Použití atributu MixedRealityDataProvider

Klíčovým krokem při vytváření zprostředkovatele dat vstupního systému je použití atributu MixedRealityDataProvider na třídu . Tento krok umožňuje nastavit výchozí profil a platformy pro zprostředkovatele, pokud je vybraný v profilu vstupního systému.

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

Implementace metod IMixedRealityDataProvider

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

Poznámka

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

Zprostředkovatel dat by měl implementovat následující 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 podporovaných kontrolerů.

Implementace tříd kontroleru

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

Zdrojový kód pro každou 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ů kontrolerů.

Použití atributu MixedRealityController

Dále použijte atribut na MixedRealityController třídu . Tento atribut určuje typ ovladače (např. kloubová ruka), rukou (např. vlevo nebo vpravo) a volitelný obrázek ovladače.

[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 kontrolerem. Pro 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 prostředkem k potvrzení správného mapování os a tlačítek pro přiřazení k interakcím.

Následující příklad je zkrácen z GenericOpenVRController třídy , 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 definice vstupní osy a tlačítek Unity.

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

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

V případě 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 analogových ovládacích prvků (např. pozice touchpadu) by měla být vyvolána událost InputChanged.

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

Přidání instrumentace profileru Unity

Výkon je v aplikacích hybridní reality velmi důležitý. Každá komponenta přidává určitou režii, kterou musí aplikace počítat. Za tímto účelem je důležité, aby všichni poskytovatelé vstupních dat obsahovali instrumentaci Profileru Unity ve vnitřní smyčce a často využívané cesty kódu.

Při instrumentaci vlastních zprostředkovatelů se doporučuje implementovat model, který použí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 – volitelná poznámka"

Doporučujeme, aby vlastní zprostředkovatelé dat postupoval podobným způsobem, aby se zjednodušila identifikace 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 konfigurují pomocí profilů.

Zprostředkovatelé 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 příkladu v této části najdete v MRTK. Services/InputSimulation složka.

Definování profilu

Obsah profilu by měl odrážet přístupné vlastnosti pozorovatele (např. interval aktualizace). Všechny uživatelem konfigurovatelné vlastnosti definované v každém rozhraní by měly být obsaženy v profilu.

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

Atribut CreateAssetMenu lze použít na třídu profilu, aby zákazníci mohli vytvořit instanci profilu pomocí nabídky Vytvořit > prostředky > Mixed Reality Profily sady nástrojů>.

Implementace inspektoru

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

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

Atribut CustomEditor informuje Unity o typu prostředku, na který se inspektor vztahuje.

Vytvoření definic sestavení

sada Mixed Reality Toolkit používá definiční soubory sestavení (.asmdef) k určení závislostí mezi komponentami a také k tomu, aby unity pomohla zkrátit dobu kompilace.

Doporučuje se vytvářet definiční soubory sestavení 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 pro zprostředkovatele dat. V tomto příkladu bude mít název ContosoInput a bude umístěný ve složce ContosoInput v příkladu. Tato definice sestavení musí určovat závislost na Microsoft.MixedReality.Toolkit a všech ostatních sestaveních, na kterých závisí.

Definice sestavení ContosoInputEditor určí inspektor profilu a libovolný 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 bude soubor umístěný 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ří se distribuují jako komponenty třetích stran, mají konkrétní podrobnosti o balení a distribuci ponechány na preferenci vývojáře. Nejběžnějším řešením bude pravděpodobně vygenerovat balíček .unitypackage a distribuovat ho 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é