Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Hand Coach es una mano 3D modelada 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 manos podría usarse para representar presionar un botón o seleccionar 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 hand coach existentes:
- Cerca de pulsar: se usa para botones o para cerrar objetos interactables
- Selección lejana: se usa para 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
- Voltear a mano: se usa para abrir un panel de inicio de la interfaz de usuario o menús de mano
- Palma arriba : se utiliza para el momento colibrí en la experiencia fuera de la caja. 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
Recursos de Hand 3D
Puede encontrar los recursos en: MixedRealityToolkit.SDK/Experimental/HandCoach
Calidad
Si observa distorsión en la malla de piel, debe asegurarse de que el proyecto usa la cantidad adecuada de articulaciones.
Vaya a Edit > Project Settings Quality > Other Blend Weights (Calidad > de otros > pesos de mezcla) de Unity. Asegúrese de que se seleccionan "4 huesos" para ver uniones suaves.
Scripts
Sugerencia de interacción
El InteractionHint.cs
script proporciona funcionalidad de contenedor para desencadenar animaciones y fundidos para el equipo manual.
Configuración de una sugerencia de interacción
Para configurar una sugerencia de interacción, se recomienda usar los prefabs proporcionados "StaticHandCoachRoot_L.prefab" y "StaticHandCoachRoot_R.prefab". Este objeto prefabricado contiene el script InteractionHint y el equipo manual, así como la jerarquía adecuada para asegurarse de que las animaciones de sugerencias proporcionadas funcionan según lo previsto. De lo contrario, tendrá que colocar el script en un gameObject un nivel primario desde el equipo de mano con el animador.
Propiedades del inspector
HideIfHandTracked Este valor booleano especifica si se debe usar el estado de seguimiento manual 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 oculta 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 sugerencias cuando se ha pasado el temporizador mínimo o máximo. A continuación, la sugerencia se oculta y espera de nuevo el retraso.
Autoactivar 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 tiene previsto 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. Esto debe establecerse antes de llamar a la función StartHintLoop() (durante OnEnable si se activa AutoActivate).
Control de interactionHint a través de 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 la animación de atenuación si no se está reproduciendo actualmente, a continuación, desactivará el bucle show/hide y establecerá el equipo manual inactivo 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 establecerlo con su propia función, que debe devolver true cuando desee ocultar los objetos visuales de la mano (tenga en cuenta MinMaxTimer, específicamente el parámetro max).
Consideraciones de animación personalizadas
Los fundidos se establecen de forma predeterminada en 0,5 segundos, por lo que cualquier animación personalizada creada para su uso con el equipo debe ser de 1,5 segundos como mínimo para que se transmita información significativa.
Los estados de atenuación y atenuación predeterminados proporcionados, Fade_In y Fade_Out se pueden ajustar cambiando la marca de tiempo del segundo fotograma clave para establecer la longitud del fundido.
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, simplemente importa tu fbx, asegúrate de que el nombre de la animación esté establecido con un nombre distinto y arrastra 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 prefabs proporcionados "MovingHandCoachRoot_L.prefab" y "MovingHandCoachRoot_R.prefab" contienen un 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 animador para tu equipo.
Propiedades del inspector
- TrackingObject Establézcalo con el objeto que quiere que siga el equipo 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 se mueva el equipo 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 puede establecer el objeto de destino como un 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 moverse de TrackingObject a TargetObject en segundos.
- TargetOffset Desplazamiento ajustable para que GameObject llegue a la posición de destino correcta. Esto resulta útil si la animación incluye un desplazamiento de posición durante la animación.
- AnimationCurve Esto se establece de forma predeterminada en una curva lineal, pero puede modificar la curva para proporcionar una aceleración de entrada y salida al iniciar y detener la ruta de movimiento.
Control de MoveToTarget mediante script
En el script personalizado, realice una llamada a Follow() mientras desea que la plataforma de mano siga trackingObject y, a continuación, realice una llamada a MoveToTargetPosition() cuando desee que el equipo de mano inicie su movimiento en TargetObject.
Control de 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(). Follow debe establecerse en el primer fotograma clave, ya que hace que el equipo de mano siga el TrackingObject. MoveToTargetPosition debe establecerse en el fotograma clave donde desea que el equipo empiece a moverse al destino. Así es como se usa la funcionalidad de script en los objetos prefabricados proporcionados.
RotateAroundPoint
El script de RotateAroundPoint.cs proporciona funcionalidad para girar la sugerencia de mano alrededor de un punto de pivote a lo largo del tiempo.
Configuración de RotateAroundPoint
Los 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 animador para tu equipo.
Propiedades del inspector
- CenteredParent Establézcalo con el objeto primario por el que desea que el equipo pivote.
- InverseParent Establézcalo con el elemento primario para girar inverso a centeredParent con el fin de mantener la misma orientación de la mano. En general, este será el objeto primario con el script InteractionHint en él.
- PivotPosition Establézcalo en un punto en el que quiera que la sugerencia comience a movimientor.
- Duración La cantidad de tiempo que debe tardar (en segundos) en girar alrededor de CenteredParent.
- AnimationCurve Esto se establece de forma predeterminada en una curva lineal, pero puede modificar la curva para proporcionar una aceleración de entrada y salida al iniciar y detener la ruta de movimiento.
- RotationVector Número de grados que se van a girar a lo largo de cada eje.
Control de RotateAroundPoint mediante script
En el script personalizado, realice una llamada a RotateToTarget() cuando desee que el equipo manual comience su rotación alrededor de CenteredParent. Cuando desee que la posición se restablezca a la pivotposition original, realice una llamada a ResetAndDeterminePivot().
Control de RotateAroundPoint mediante 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 el equipo manual se restablezca a PivotPosition. RotateToTarget debe establecerse en el fotograma clave donde desea que el equipo empiece a girar alrededor de CenteredParent. Así es como se usa la funcionalidad de script en los objetos prefabricados proporcionados.