Menú Manual : MRTK2

Ejemplo de experiencia de usuario del menú Mano

Los menús de mano permiten a los usuarios abrir rápidamente la interfaz de usuario conectada a la mano para las funciones usadas con frecuencia. Para evitar la activación falsa al interactuar con otros objetos, el menú de la mano proporciona opciones como "Requerir mano plana" y "Usar activación de mirada". Se recomienda usar estas opciones para evitar la activación no deseada.

Ejemplos del menú Mano

La escena HandMenuExamples.unity está en MRTK/Examples/Demos/HandTracking/Scenes la carpeta . Cuando se ejecuta, la escena solo activará el tipo de menú seleccionado actualmente.
HandMenu_ExampleScene

Puede encontrar estos objetos prefabricados de menú manual en MRTK/Examples/Common/Prefabs la carpeta .

HandMenu_Small_HideOnHandDrop y HandMenu_Medium_HideOnHandDrop

Estos dos ejemplos simplemente activan y desactivan el objeto MenuContent para mostrar y ocultar el menú en el evento OnFirstHandDetected() y OnLastHandLost().
HandMenu_ExampleScene 1
HandMenu_ExampleScene 2

HandMenu_Large_WorldLock_On_GrabAndPull

En el caso de menús más complejos que requieren un tiempo de interacción más largo, se recomienda bloquear el menú. En este ejemplo, el usuario puede agarrar y extraer el menú para bloquear el mundo, además de activar y desactivar los eventos MenuContent en OnFirstHandDetected() y OnLastHandLost().
HandMenu_ExampleScene 3

Backplate ManipulationHandler hace que sea agarrable y extraíble. En el evento Manipulation Started, SolverHandler.UpdateSolvers se desactiva para bloquear el menú. Además, muestra el botón Cerrar para permitir al usuario cerrar el menú cuando finalice la tarea. En el evento Manipulation Ended , llama a HandConstraintPalmUp.StartWorldLockReattachCheckCoroutine para permitir que el usuario devuelva el menú a la mano levantando y mirando la palma.
HandMenu_ExampleScene 4

El botón Cerrar reactiva SolverHandler.UpdateSolvers y oculta MenuContent.
HandMenu_ExampleScene 5

HandMenu_Large_AutoWorldLock_On_HandDrop

Este ejemplo es similar a HandMenu_Large_WorldLock_On_GrabAndPull. La única diferencia es que el menú se bloqueará automáticamente al colocar la mano. Este comportamiento se controla ocultando menuContent en el evento OnLastHandLost(). El comportamiento de extracción de captura & es el mismo que HandMenu_Large_WorldLock_On_GrabAndPull ejemplo.

Scripts

El HandConstraint comportamiento proporciona un solucionador que restringe el objeto de seguimiento a una región segura para el contenido restringido a mano (como la interfaz de usuario de mano, los menús, etc.). Las regiones seguras se consideran áreas que no se intersecan con la mano. También se incluye una clase derivada de HandConstraint llamada HandConstraintPalmUp para mostrar un comportamiento común de activar el objeto con seguimiento del solucionador cuando la palma mira hacia el usuario.

Consulte las sugerencias de herramientas disponibles para cada HandConstraint propiedad para obtener más documentación. A continuación se definen algunas propiedades con más detalle.

HandMenu_ExampleScene Palma arriba
  • Zona segura: la zona segura especifica dónde se va a restringir el contenido. Se recomienda que el contenido se coloque en el lado ulnar para evitar superposición con la mano y una calidad de interacción mejorada. Las zonas seguras se calculan tomando la orientación de las manos proyectadas en un plano ortogonal a la vista de la cámara y raycasting contra un rectángulo delimitador alrededor de las manos. Las zonas seguras se definen para trabajar con IMixedRealityHand , pero también funcionan con otros tipos de controlador. Se recomienda explorar lo que cada zona segura representa en diferentes tipos de controlador.

  • Seguir la mano hasta la cámara orientada Con esta configuración activa, el solucionador seguirá la rotación de la mano hasta que el menú esté lo suficientemente alineado con la mirada, momento en el que se enfrenta a la cámara. Este comportamiento funciona cambiando SolverRotationBehavior en HandConstraintSolver, de LookAtTrackedObject a LookAtMainCamera a medida que varía el ángulo gazeAlignment con el solucionador.

Zonas seguras handMenu
  • Eventos de activación: actualmente, desencadena HandConstraint cuatro eventos de activación. Estos eventos se pueden usar en muchas combinaciones diferentes para crear comportamientos únicos HandConstraint ; vea la escena HandBasedMenuExample en MRTK/Examples/Demos/HandTracking/Scenes/ para obtener ejemplos de estos comportamientos.

    • OnHandActivate: se desencadena cuando una mano satisface el método IsHandActive.
    • OnHandDeactivate: se desencadena cuando el método IsHandActive ya no está satisfecho.
    • OnFirstHandDetected: se produce cuando el estado de seguimiento de la mano cambia de ninguna de las manos en la vista, a la primera mano en la vista.
    • OnLastHandLost: se produce cuando el estado de seguimiento de la mano cambia de al menos una mano en la vista, a ninguna de las manos en la vista.
  • Lógica de activación y desactivación de Solver: actualmente, la recomendación para activar y desactivar HandConstraintPalmUp la lógica es hacerlo mediante el valor UpdateSolver de SolverHandler, en lugar de deshabilitar o habilitar el objeto. Este comportamiento se puede ver en la escena de ejemplo a través de los enlaces basados en editor desencadenados después de los eventos ManipulationHandler "OnManipulationStarted/Ended" del menú adjunto.

    • Detener la lógica de restricción de mano: al intentar establecer el objeto restringido a mano para detener (o no ejecutar) la lógica de activación o desactivación, establezca UpdateSolver en False en lugar de deshabilitar HandConstraintPalmUp.
      • Si desea habilitar la lógica Reattach basada en la mirada (o incluso no basada en la mirada), siga llamando a la función HandConstraintPalmUp.StartWorldLockReattachCheckCoroutine(). Esta llamada desencadenará una corrutina que, a continuación, seguirá comprobando si se cumplen los criterios "IsValidController" y establecerá UpdateSolver en True una vez que sea (o el objeto esté deshabilitado).
    • Iniciar la lógica de restricción de mano: al intentar establecer el objeto restringido a mano para empezar a seguir la mano de nuevo (en función de si cumple los criterios de activación), establezca UpdateSolver de SolverHandler en true.
  • Lógica de reintento: actualmente, puede HandConstraintPalmUp volver a adjuntar automáticamente el objeto de destino al punto de seguimiento, independientemente de si UpdateSolver de SolverHandler es True o no. Este comportamiento se controla mediante la llamada a la función StartWorldLockReattachCheckCoroutine() de HandConstraintPalmUp, después de que se haya bloqueado el mundo (lo que, en este caso, establece eficazmente updateSolver de SolverHandler en False).

Consulte también