Menu main — MRTK2

Exemple d’expérience utilisateur du menu Main

Les menus Main permettent aux utilisateurs d’afficher rapidement une interface utilisateur attachée à la main pour les fonctions fréquemment utilisées. Pour éviter une activation fausse lors de l’interaction avec d’autres objets, le menu main fournit des options telles que « Exiger une main plate » et « Utiliser l’activation du regard ». Il est recommandé d’utiliser ces options pour empêcher l’activation indésirable.

Exemples de menu main

La scène HandMenuExamples.unity se trouve sous le MRTK/Examples/Demos/HandTracking/Scenes dossier. Lorsqu’elle est en cours d’exécution, la scène active uniquement le type de menu actuellement sélectionné.
HandMenu_ExampleScene

Vous trouverez ces préfabriqués de menu à main sous MRTK/Examples/Common/Prefabs dossier.

HandMenu_Small_HideOnHandDrop et HandMenu_Medium_HideOnHandDrop

Ces deux exemples activent et désactivent simplement l’objet MenuContent pour afficher et masquer le menu sur les événements OnFirstHandDetected() et OnLastHandLost().
HandMenu_ExampleScene 1
HandMenu_ExampleScene 2

HandMenu_Large_WorldLock_On_GrabAndPull

Pour les menus plus complexes qui nécessitent un temps d’interaction plus long, il est recommandé de verrouiller le menu dans le monde entier. Dans cet exemple, l’utilisateur peut récupérer et extraire pour verrouiller le menu dans le monde entier, en plus d’activer et de désactiver les événements MenuContent sur OnFirstHandDetected() et OnLastHandLost().
HandMenu_ExampleScene 3

La plaque arrière le ManipulationHandler rend arrachable et mobile. Lors de l’événement Manipulation Started , SolverHandler.UpdateSolvers est désactivé pour verrouiller le menu. En outre, il affiche le bouton Fermer pour permettre à l’utilisateur de fermer le menu une fois la tâche terminée. Lors de l’événement Manipulation Terminée , il appelle HandConstraintPalmUp.StartWorldLockReattachCheckCoroutine pour permettre à l’utilisateur de rétablir le menu en levant et en regardant la paume.
HandMenu_ExampleScene 4

Le bouton Fermer réactive SolverHandler.UpdateSolvers et masque le MenuContent.
HandMenu_ExampleScene 5

HandMenu_Large_AutoWorldLock_On_HandDrop

Cet exemple est similaire à HandMenu_Large_WorldLock_On_GrabAndPull. La seule différence est que le menu sera automatiquement verrouillé dans le monde entier lors du dépôt à la main. Ce comportement est géré en ne masquant pas l’événement MenuContent sur OnLastHandLost(). Le comportement d’extraction & est identique à HandMenu_Large_WorldLock_On_GrabAndPull exemple.

scripts ;

Le HandConstraint comportement fournit un solveur qui contraint l’objet suivi à une région sécurisée pour le contenu de la main (par exemple, l’interface utilisateur de main, les menus, etc.). Les régions sécurisées sont considérées comme des zones qui ne se croisent pas avec la main. Une classe dérivée de HandConstraint appelée HandConstraintPalmUp est également incluse pour illustrer un comportement courant de l’activation de l’objet suivi du résolveur lorsque la paume est orientée vers l’utilisateur.

Pour plus de documentation, consultez les conseils d’outils disponibles pour chaque HandConstraint propriété. Quelques propriétés sont définies plus en détail ci-dessous.

HandMenu_ExampleScene Palm vers le haut
  • Zone sécurisée : la zone de sécurité spécifie où sur la main pour limiter le contenu. Il est recommandé de placer le contenu côté Ulnar afin d’éviter tout chevauchement avec la main et d’améliorer la qualité de l’interaction. Les zones de sécurité sont calculées en prenant l’orientation des mains projetée dans un plan orthogonal à la vue de la caméra et en raycasting sur un cadre englobant autour des mains. Les zones sécurisées sont définies pour fonctionner avec IMixedRealityHand , mais fonctionnent également avec d’autres types de contrôleurs. Il est recommandé d’explorer ce que chaque zone sécurisée représente sur différents types de contrôleurs.

  • Suivre la main jusqu’à la caméra face Avec ce paramètre actif, le solveur suit la rotation de la main jusqu’à ce que le menu soit suffisamment aligné sur le regard, auquel moment il fait face à la caméra. Ce comportement fonctionne en modifiant le SolverRotationBehavior dans handConstraintSolver, de LookAtTrackedObject à LookAtMainCamera, car l’angle GazeAlignment avec le solveur varie.

Zones de sécurité HandMenu
  • Événements d’activation : déclenche actuellement HandConstraint quatre événements d’activation. Ces événements peuvent être utilisés dans de nombreuses combinaisons différentes pour créer des comportements uniques HandConstraint . Consultez la scène HandBasedMenuExample sous MRTK/Examples/Demos/HandTracking/Scenes/ pour obtenir des exemples de ces comportements.

    • OnHandActivate : se déclenche lorsqu’une main satisfait à la méthode IsHandActive.
    • OnHandDeactivate : se déclenche lorsque la méthode IsHandActive n’est plus satisfaite.
    • OnFirstHandDetected : se produit lorsque l’état de suivi des mains passe de aucune main en vue à la première main dans l’affichage.
    • OnLastHandLost : se produit lorsque l’état de suivi des mains passe d’au moins une main en vue à aucune main en vue.
  • Logique d’activation/désactivation du solveur : actuellement, il est recommandé d’activer et de désactiver la logique en utilisant la valeur UpdateSolver de SolverHandler, plutôt qu’en désactivant/en activant HandConstraintPalmUp l’objet. Ce comportement peut être vu dans l’exemple de scène via les hooks basés sur l’éditeur déclenchés après les événements ManipulationHandler « OnManipulationStarted/Ended » du menu joint.

    • Arrêt de la logique de contrainte manuelle : lorsque vous essayez de définir l’objet hand contrainte pour arrêter (ou ne pas exécuter) la logique d’activation/désactivation, définissez UpdateSolver sur False au lieu de désactiver HandConstraintPalmUp.
      • Si vous souhaitez activer la logique de rattachement basée sur le regard (ou même non sur le regard), effectuez un suivi en appelant la fonction HandConstraintPalmUp.StartWorldLockReattachCheckCoroutine(). Cet appel déclenche une coroutine qui continue à case activée si le critère « IsValidController » est rempli et définit UpdateSolver sur True une fois qu’il est (ou l’objet est désactivé).
    • Démarrage de la logique de contrainte de main : lorsque vous essayez de définir l’objet hand contrainte pour qu’il recommence à suivre votre main (selon qu’il répond ou non aux critères d’activation), définissez UpdateSolver du SolverHandler sur true.
  • Retacher laHandConstraintPalmUp logique : actuellement, est en mesure de rattacher automatiquement l’objet cible au point suivi, que le updateSolver du SolverHandler ait ou non la valeur True. Ce comportement est géré par l’appel de la fonction StartWorldLockReattachCheckCoroutine() de HandConstraintPalmUp, une fois qu’elle a été verrouillée dans le monde (ce qui, dans ce cas, définit effectivement updateSolver du SolverHandler sur False).

Voir aussi