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čená struktura složek
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.
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.
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.