Entrenador a mano : MRTK2

Hand Coach Menu

El entrenador de manos es la mano modelada 3D que se desencadena cuando el sistema no detecta las manos del usuario. Esto se implementa como un componente de "enseñanza" que ayuda a guiar al usuario cuando no se ha enseñado el gesto. Si los usuarios no han realizado el gesto especificado durante un período, las manos se repetirán con un retraso. El entrenador de mano se puede usar para representar presionar un botón o recoger un holograma.

El modelo de interacción actual representa una amplia variedad de controles de gestos, como el desplazamiento, la selección lejana y la pulsación cercana. A continuación se muestra una lista completa de ejemplos de entrenador de mano existentes:

  • Cerca de pulsar: se usa para botones o cerrar objetos interactivos
  • Selección lejana: se usa para los objetos que están lejos
  • Mover: se usa para mover un holograma en el espacio
  • Girar: se usa para mostrar cómo girar hologramas u objetos
  • Escala: se usa para mostrar cómo manipular hologramas para que sean más grandes o más pequeños.
  • Volteo de mano: se usa para abrir un panel de inicio de la interfaz de usuario o menús de mano
  • Palm up : se usa para el momento de hummingbird en la experiencia de fábrica. Otra sugerencia podría ser abrir un panel de inicio de la interfaz de usuario.
  • Scroll: se usa para desplazarse por una lista o un documento largo

Escena de ejemplo

Puede encontrar ejemplos en la escena HandCoachExample en: MixedRealityToolkit.Examples/Experimental/HandCoach/Scenes

Mano de recursos 3D

Puede encontrar los recursos en: MixedRealityToolkit.SDK/Experimental/HandCoach.

Calidad

Si observa distorsiones en la malla de piel, debe asegurarse de que el proyecto está usando la cantidad adecuada de articulaciones. Vaya a Edición > de Unity Project Configuración > Calidad > de otros > pesos de mezcla. Asegúrese de que se seleccionan "4 huesos" para ver articulaciones suaves. Project Setting

Scripts

Sugerencia de interacción

El InteractionHint.cs script proporciona funcionalidad de contenedor para desencadenar animaciones y fundidos para la plataforma de manos.

Configuración de una sugerencia de interacción

Para configurar una sugerencia de interacción, se recomienda usar los objetos prefabricados proporcionados "StaticHandCoachRoot_L.prefab" y "StaticHandCoachRoot_R.prefab". Este objeto prefabricado contiene el script InteractionHint y la plataforma de mano, así como la jerarquía adecuada para asegurarse de que las animaciones de sugerencias proporcionadas funcionan según lo previsto. De lo contrario, tendrás que colocar el script en un gameObject un nivel primario hacia arriba desde tu plataforma de mano con animador.

Propiedades del inspector

  • HideIfHandTracked Este valor booleano especifica si se debe usar el estado de seguimiento de manos para ocultar objetos visuales cuando se realiza el seguimiento de las manos de un usuario. Si se establece en false, solo se usará la propiedad de scripting "customShouldHideVisuals" para determinar si se va a ocultar la sugerencia.

  • MinDelay Esta propiedad especifica el retraso mínimo para mostrar los objetos visuales. De forma predeterminada, los objetos visuales de la mano aparecerán después de estos muchos segundos si no se realiza el seguimiento de las manos del usuario.

  • MaxDelay Esta propiedad especifica el retraso máximo para mostrar los objetos visuales. De forma predeterminada, los objetos visuales de la mano aparecerán después de estos muchos segundos, incluso si se realiza el seguimiento de las manos del usuario.

  • UseMaxTimer Si este valor booleano se establece en false, deshabilita el temporizador máximo y solo permite mostrar la sugerencia de mano cuando las manos del usuario están fuera de la vista o la condición personalizada devuelve false.

  • Repite Esta propiedad controla cuántas veces se reproduce la animación de sugerencia cuando se ha pasado el temporizador mínimo o máximo. A continuación, la sugerencia oculta y espera el retraso de nuevo.

  • AutoActivate Cuando este valor booleano se establece en true, la sugerencia se ejecutará automáticamente a través de la lógica del temporizador cuando gameObject del script esté activo en la jerarquía y el script esté habilitado. Esto solo debe establecerse en false si piensa controlar manualmente la apariencia de la sugerencia y la desaparición a través del código.

  • AnimationState Nombre del estado de animación que debe reproducirse cuando la sugerencia está activa. Debe establecerse antes de llamar a la función StartHintLoop() (durante OnEnable si se activa AutoActivate).

Control de InteractionHint mediante script

  • StartHintLoop Esta función inicia el bucle show/hide que, de lo contrario, inicia OnEnable si la marca AutoActivate está establecida en true.
  • StopHintLoop Esta función llama al estado de animación de atenuación si no se está reproduciendo actualmente, desactivará el bucle show/hide y establecerá la plataforma de mano inactiva en la jerarquía.
  • AnimationState Esta cadena determina qué estado de animación se reproduce durante el bucle. Puede cambiar esta cadena para cambiar el estado que se reproduce, pero debe hacerlo después de llamar a StopHintLoop y debe llamar a StartHintLoop de nuevo después de haber cambiado el estado.
  • CustomShouldHideVisuals Puede establecer esto con su propia función, que debe devolver true cuando desee ocultar los objetos visuales de mano (tenga en cuenta MinMaxTimer, específicamente el parámetro max).

Consideraciones de animación personalizadas

Las atenuaciones tienen como valor predeterminado 0,5 segundos, por lo que las animaciones personalizadas creadas para su uso con la plataforma deben ser de 1,5 segundos como mínimo para que se transmita información significativa.

Los estados predeterminados de atenuación y atenuación proporcionados, Fade_In y Fade_Out se pueden ajustar cambiando la marca de tiempo del segundo fotograma clave para establecer la longitud de atenuación.

El animador y el script se configuraron de forma que la configuración sea lo más sencilla posible. Para agregar nuevos estados de animación, basta con importar fbx, asegúrese de que el nombre de la animación esté establecido con un nombre distinto y arrastre esa animación al animador.

MoveToTarget

El script MoveToTarget.cs proporciona funcionalidad para mover la sugerencia de mano de una posición de seguimiento a una posición de destino a lo largo del tiempo.

Configuración de MoveToTarget

Los objetos prefabricados proporcionados "MovingHandCoachRoot_L.prefab" y "MovingHandCoachRoot_R.prefab" contienen moveToTarget en sus jerarquías. Si quieres usar este script en tu propia configuración, debes colocarlo en el objeto de juego raíz que contiene el Animator para tu equipo.

Propiedades del inspector

  • TrackingObject Establézcalo con el objeto que desea que siga la plataforma antes de iniciar su movimiento. Se recomienda crear un GameObject vacío y moverlo a una posición específica para ayudarle a identificar el seguimiento.
  • TargetObject Establézcalo con el objeto al que desea que la plataforma se mueva durante su movimiento. Se recomienda crear un GameObject vacío y moverlo a una posición específica para ayudarle a identificar el seguimiento.
  • RootObject Establézcalo en un elemento primario compartido entre el seguimiento y el objeto de destino para que las posiciones relativas se puedan calcular correctamente. El objeto prefabricado incluido tiene objetos de seguimiento y de destino en su jerarquía, pero puedes establecer el objeto de destino como gameObject fuera del objeto prefabricado y cambiar el objeto raíz a un elemento primario compartido.
  • Duración La cantidad de tiempo que debe tardar (en segundos) en pasar de TrackingObject a TargetObject en segundos.
  • TargetOffset Desplazamiento ajustable para obtener el GameObject para llegar a la posición de destino correcta. Esto es útil si la animación incluye un desplazamiento de posición durante la animación.
  • AnimationCurve Este valor predeterminado es una curva lineal, pero puede modificar la curva para proporcionar aceleración al iniciar y detener la ruta de acceso del movimiento.

Control de MoveToTarget mediante script

En el script personalizado, realice una llamada a Follow() mientras desea que la plataforma de mano siga el objeto TrackingObject y, a continuación, realice una llamada a MoveToTargetPosition() cuando desee que la plataforma de mano comience su movimiento al TargetObject.

Controlar MoveToTarget a través de animaciones

En la animación que necesita moverse, establezca dos eventos: uno con una llamada a Follow() y otro con una llamada a MoveToTargetPosition(). Siga debe establecerse en el primer fotograma clave, ya que hace que el equipo de manos siga el objeto TrackingObject. MoveToTargetPosition debe establecerse en el fotograma clave donde desea que la plataforma empiece a moverse al destino. Así es como se usa la funcionalidad de script en los objetos prefabricados proporcionados.

RotateAroundPoint

El script RotateAroundPoint.cs proporciona funcionalidad para girar la sugerencia de mano alrededor de un punto dinámico a lo largo del tiempo.

Configuración de RotateAroundPoint

Los objetos prefabricados proporcionados "RotatingHandCoachRoot_L.prefab" y "RotatingHandCoachRoot_R.prefab" contienen un RotateAroundPoint en sus jerarquías. Si quieres usar este script en tu propia configuración, debes colocarlo en el objeto de juego raíz que contiene el Animator para tu equipo.

Propiedades del inspector

  • CentreParent Establézcalo con el objeto primario en el que desea que la plataforma se despivote.
  • InverseParent Establézcalo con el elemento primario para girar inverso a centreParent con el fin de mantener la orientación de la mano igual. En general, será el objeto primario con el script InteractionHint en él.
  • PivotPosition Establézcalo en un punto en el que desee que la sugerencia comience el movimiento.
  • Duración La cantidad de tiempo que debe tardar (en segundos) en girar alrededor de Laparente centrada.
  • AnimationCurve Este valor predeterminado es una curva lineal, pero puede modificar la curva para proporcionar aceleración al iniciar y detener la ruta de acceso del movimiento.
  • RotationVector Cuántos grados girar a lo largo de cada eje.

Control de RotateAroundPoint mediante script

En el script personalizado, realice una llamada a RotateToTarget() cuando desee que la plataforma de mano comience su rotación alrededor de La clase CenteredParent. Cuando desee que la posición se restablezca en la PivotPosition original, realice una llamada a ResetAndDeterminePivot().

Controlar RotateAroundPoint a través de animaciones

En la animación que necesita moverse, establezca dos eventos: uno con una llamada a ResetAndDeterminePivot() y otro con una llamada a RotateToTarget(). ResetAndDeterminePivot debe establecerse en el primer fotograma clave, ya que hace que la plataforma de mano se restablezca a la PivotPosition. RotateToTarget debe establecerse en el fotograma clave en el que desea que la plataforma empiece a girar alrededor de La propiedad CenteredParent. Así es como se usa la funcionalidad de script en los objetos prefabricados proporcionados.