Formación
Módulo
Introducción a la interacción con objetos 3D - Training
En este curso se proporcionan los pasos y procedimientos que deben seguirse acerca de cómo manipular objetos 3D e interactuar con ellos.
Este explorador ya no es compatible.
Actualice a Microsoft Edge para aprovechar las características, las actualizaciones de seguridad y el soporte técnico más recientes.
Los menús de mano permiten a los usuarios mostrar la interfaz de usuario adjunta a mano para las funciones usadas con frecuencia. Suelen ser grupos de botones pequeños que ofrecen acciones rápidas. Sin embargo, a veces se proporcionan diseños más complejos para mostrar información o configuración al usuario como un menú de mano, a menudo con la opción de "arrancar" el menú de la mano y anclarlo en el mundo.
El menú Mano proporciona las opciones "Requerir mano plana" y "Usar activación de mirada" para evitar la activación falsa mientras interactúa con otros objetos. Se recomienda usar estas opciones para evitar la activación no deseada.
Si usa el proyecto de plantilla, HandMenuExamples.unity
muestra varias configuraciones comunes para los menús de mano, todas ellas mediante el HandConstraintPalmUp
script.
Este objeto prefabricado muestra el ejemplo de una interfaz de usuario grande o compleja que requiere un tiempo de interacción extendido. Para este tipo de interfaz de usuario, se recomienda bloquear el menú a mano para mejorar la facilidad de uso y evitar la fatiga del brazo. En este ejemplo también se admite "grab and pull" para bloquear el menú.
En este ejemplo, el menú se vuelve visible e invisible activando el objeto MenuContent en el evento OnFirstHandDetected(). Con el evento OnLastHandLost(), se activa el botón cerrar y se desencadena la animación de selección de ubicación. La animación es una fluctuación de escalado simple. Dado que no ocultamos el evento MenuContent en OnLastHandLost(), el menú se bloqueará automáticamente cuando la mano no esté visible. Los valores de la sección Palm Up se han optimizado para que el menú esté bloqueado por el mundo sin arrastrarse demasiado hacia abajo a mano.
En este ejemplo se proporciona la barra que se puede agarrar en el área inferior del menú y el comportamiento automático de bloqueo global. El usuario puede desasociar explícitamente el menú de la mano y colocarlo en el mundo agarrándolo. Para ello, en el evento ManipulationStarted() en ObjectManipulator, deshabilitamos SolverHandler.UpdateSolvers. De lo contrario, el menú no podrá desasociarse, ya que el solucionador HandConstraint intentará colocar el menú cerca de la posición de la mano. También usamos HandConstraintPalmUp.StartWorldLockReattachCheckCoroutine para permitir que el usuario levante la mano para volver a adjuntar el menú a la mano.
Por último, el botón cerrar debe reactivar solverHandler.UpdateSolvers para restaurar la funcionalidad del solucionador HandConstraint.
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 la mano, los menús, etc.) Las regiones seguras se consideran áreas que no intersecan con la mano. También se incluye una clase derivada de HandConstraint
llamada HandConstraintPalmUp
para mostrar un comportamiento común de activación del objeto de seguimiento del solucionador cuando la palma de la mano se encuentra frente al usuario.
Consulte la información sobre herramientas disponible para cada HandConstraint
propiedad para obtener documentación adicional. A continuación se definen algunas propiedades con más detalle.
Zona segura: la zona segura especifica dónde se va a restringir el contenido. Se recomienda colocar contenido en el lado ulnar para evitar la superposición con la mano y mejorar la calidad de la interacción. Las zonas seguras se calculan mediante la orientación de las manos proyectada en un plano ortogonal a la vista de la cámara y la difusión por rayos contra un rectángulo delimitador alrededor de las manos. Las zonas seguras se definen para trabajar con XRNode
. Se recomienda explorar lo que cada zona segura representa en diferentes tipos de controlador.
Seguir la mano hasta la cámara frontal Con esta opción activa, el solucionador seguirá la rotación de la mano hasta que el menú esté lo suficientemente alineado con la mirada cuando se enfrente a la cámara. Para que esto funcione, cambie en SolverRotationBehavior
, HandConstraintSolver
de LookAtTrackedObject
a LookAtMainCamera
como varía el GazeAlignment
ángulo con el solucionador.
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
.
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 SolverHandler
valor 's UpdateSolver
en lugar de deshabilitar o habilitar el objeto. Esto 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.
HandConstraintPalmUp.StartWorldLockReattachCheckCoroutine()
función . Esto desencadenará una corrutina que sigue comprobando si se cumplen los criterios "IsValidController
" y establecerá UpdateSolver en True una vez que esté (o el objeto esté deshabilitado).HandConstraintPalmUp
puede volver a conectar automáticamente el objeto de destino al punto al que se realiza el seguimiento, independientemente de si el SolverHandler
valor de UpdateSolver
es True. Para ello, se llama a la HandConstraintPalmUp
función de después de StartWorldLockReattachCheckCoroutine()
que se haya bloqueado por el mundo (lo que, en este caso, está estableciendo eficazmente UpdateSolver de SolverHandler en False).Formación
Módulo
Introducción a la interacción con objetos 3D - Training
En este curso se proporcionan los pasos y procedimientos que deben seguirse acerca de cómo manipular objetos 3D e interactuar con ellos.
Documentación
Descripción de los controles basados en botones en MRTK3
Detalles sobre el menú de mano "near" en MRTK3
Controles deslizantes en el MRTK3