Menu Hand

Voorbeeld van menu-UX voor de hand

Met handmenu's kunnen gebruikers snel een gebruikersinterface openen die is gekoppeld aan veelgebruikte functies. Om onwaar activering te voorkomen tijdens interactie met andere objecten, biedt het menu in het handmenu opties zoals 'Platte hand vereisen' en 'Activering van staren gebruiken'. Het wordt aanbevolen deze opties te gebruiken om ongewenste activering te voorkomen.

Voorbeelden van menu hand

De scène HandMenuExamples.unity staat onder de MRTK/Examples/Demos/HandTracking/Scenes map . Wanneer de scène wordt uitgevoerd, wordt alleen het geselecteerde menutype geactiveerd.
HandMenu_ExampleScene

U vindt deze prefabs van het handmenu onder MRTK/Examples/Demos/HandTracking/Prefabs de map .

HandMenu_Small_HideOnHandDrop en HandMenu_Medium_HideOnHandDrop

In deze twee voorbeelden wordt het object MenuContent alleen geactiveerd en gedeactiveerd om het menu op de gebeurtenis OnFirstHandDetected() en OnLastHandLost() weer te geven en te verbergen.
HandMenu_ExampleScene 1
HandMenu_ExampleScene 2

HandMenu_Large_WorldLock_On_GrabAndPull

Voor complexere menu's waarvoor langere interactietijd is vereist, is het raadzaam om het menu wereldvergrendeling te geven. In dit voorbeeld kan de gebruiker het menu vastpakken en aan de wereld vergrendelen, naast het activeren en deactiveren van de gebeurtenissen MenuContent op OnFirstHandDetected() en OnLastHandLost().
HandMenu_ExampleScene 3

Met de ManipulationHandler backplate's kunt u deze pakkend en beweegbaar maken. Bij de gebeurtenis Manipulatie gestart wordt SolverHandler.UpdateSolvers gedeactiveerd om het menu wereldvergrendeling te geven. Daarnaast wordt de knop Sluiten weergegeven, zodat de gebruiker het menu kan sluiten wanneer de taak is voltooid. Bij de gebeurtenis Manipulatie beëindigd wordt HandConstraintPalmUp.StartWorldLockReattachCheckCoroutine aanroepen zodat de gebruiker het menu weer bij de hand kan krijgen door de mand te brengen en naar de man te kijken.
HandMenu_ExampleScene 4

Met de knop Sluiten wordt SolverHandler.UpdateSolvers opnieuw geactiveerd en wordt MenuContent verborgen.
HandMenu_ExampleScene 5

HandMenu_Large_AutoWorldLock_On_HandDrop

Dit voorbeeld is vergelijkbaar met HandMenu_Large_WorldLock_On_GrabAndPull. Het enige verschil is dat het menu automatisch wordt vergrendeld bij het verwijderen van de hand. Dit wordt gedaan door de gebeurtenis MenuContent in OnLastHandLost() niet te verbergen. Het pull& pull-gedrag is hetzelfde als HandMenu_Large_WorldLock_On_GrabAndPull voorbeeld.

Scripts

Het gedrag biedt een oplossing die het bij te houden object beperkt tot een regio die veilig is voor HandConstraint beperkte inhoud (zoals gebruikersinterface, menu's, enzovoort). Safe regio's worden beschouwd als gebieden die niet met de hand kruisen. Er is ook een afgeleide klasse van met de naam opgenomen om een veelvoorkomende gedrag te demonstreren van het activeren van het bij te houden object van de solver wanneer het object de gebruiker HandConstraint HandConstraintPalmUp aan het oog heeft.

Raadpleeg de tips voor hulpprogramma's die beschikbaar zijn voor HandConstraint elke eigenschap voor aanvullende documentatie. Hieronder worden enkele eigenschappen gedetailleerder gedefinieerd.

HandMenu_ExampleScene Palm up
  • Safe Zone: de veilige zone geeft aan waar u inhoud wilt beperken. Het wordt aanbevolen om inhoud aan de Ulnar-zijde te plaatsen om overlapping met de hand en verbeterde kwaliteit van de interactie te voorkomen. Safe zones worden berekend door de richting van de handen die is geprojecteerd in een vlakgonaal naar de cameraweergave te nemen en raycasting uit te zetten op een begrensvak rond de handen. Safe zones zijn gedefinieerd om mee te IMixedRealityHand werken, maar werken ook met andere controllertypen. Het is raadzaam om te verkennen wat elke veilige zone vertegenwoordigt op verschillende controllertypen.

  • Hand volgen tot de camera gericht is Met deze actieve rol volgt de oplokker handrotatie totdat het menu voldoende is uitgelijnd met de staring, op welk punt het naar de camera kijkt. Dit werkt door de SolverRotationBehavior in de HandConstraintSolver te wijzigen van LookAtTrackedObject in LookAtMainCamera, aangezien de StarAlignment-hoek met de oplopper varieert.

HandMenu Safe Zones
  • Activeringsgebeurtenissen: Momenteel HandConstraint worden vier activeringsgebeurtenissen geactiveerd. Deze gebeurtenissen kunnen in veel verschillende combinaties worden gebruikt om uniek gedrag te maken. Zie de HandConstraint scène HandBasedMenuExample onder voor voorbeelden MRTK/Examples/Demos/HandTracking/Scenes/ van dit gedrag.

    • OnHandActivate: wordt geactiveerd wanneer een hand voldoet aan de methode IsHandActive.
    • OnHandDeactivate: wordt geactiveerd wanneer niet meer wordt voldaan aan de methode IsHandActive.
    • OnFirstHandDetected: treedt op wanneer de status van handtracking verandert van geen hands-in-view naar de eerste hand in de weergave.
    • OnLastHandLost: treedt op wanneer de status van handtracking verandert van ten minste één hand in weergave, in geen hands in view.
  • Activerings-/deactiveringslogica voor solver: Momenteel wordt aanbevolen om logica te activeren en deactiveren door gebruik te maken van de UpdateSolver-waarde van SolverHandler in plaats van het object uit te HandConstraintPalmUp stellen/in te stellen. Dit is te zien in de voorbeeldscène via de hooks op basis van de editor die zijn geactiveerd na de gebeurtenissen ManipulationHandler OnManipulationStarted/Ended van het gekoppelde menu.

    • De logica voor handbeperkingen stoppen: wanneer u probeert het beperkte object in te stellen om te stoppen (en de activerings-/deactiveringslogica niet uit te voeren), stelt u UpdateSolver in op False in plaats van HandConstraintPalmUp uit te stellen.
      • Als u de reattach-logica op basis van staren (of zelfs niet-staren) opnieuw wilt inschakelen, wordt vervolgens de functie HandConstraintPalmUp.StartWorldLockReattachCheckCoroutine() aanroepen. Dit activeert een coroutine die vervolgens blijft controleren of aan de criteria 'IsValidController' wordt voldaan en UpdateSolver wordt ingesteld op True zodra dit is (of het object is uitgeschakeld)
    • De logica voor handbeperkingen starten: wanneer u probeert in te stellen dat het handbeperkte object uw hand opnieuw volgt (op basis van of deze voldoet aan de activeringscriteria), stelt u UpdateSolver van SolverHandler in op true.
  • Logica opnieuwattachen: Op dit moment kan het doelobject automatisch opnieuw worden geattachd naar het bij te houden punt, ongeacht HandConstraintPalmUp of updatesolver van de SolverHandler waar is of niet. Dit wordt gedaan door de functie StartWorldLockReattachCheckCoroutine() van HandConstraintPalmUp aan te roepen, nadat deze is vergrendeld voor de wereld (in dit geval wordt UpdateSolver van SolverHandler in effectief op False)).

Zie ook