Entrada 211 de HoloLens (1.ª generación): gesto
Importante
Los tutoriales de Mixed Reality Academy se diseñaron con HoloLens (1.ª generación), Unity 2017 y Mixed Reality cascos envolventes en mente. Por lo tanto, creemos que es importante conservar estos tutoriales para los desarrolladores que sigan buscando instrucciones sobre el desarrollo para esos dispositivos. Estos tutoriales no se actualizarán con los conjuntos de herramientas o interacciones más recientes que se usan para HoloLens 2 y es posible que no sean compatibles con las versiones más recientes de Unity. Se mantendrán para que sigan funcionando en los dispositivos compatibles. Se ha publicado una nueva serie de tutoriales para HoloLens 2.
Los gestos convierten la intención del usuario en acción. Con los gestos, los usuarios pueden interactuar con los hologramas. En este curso, aprenderemos a realizar un seguimiento de las manos del usuario, responder a la entrada del usuario y enviar comentarios al usuario en función del estado y la ubicación de la mano.
En MR Basics 101, usamos un simple gesto de pulsación de aire para interactuar con nuestros hologramas. Ahora, iremos más allá del gesto de pulsar en el aire y exploraremos nuevos conceptos para:
- Detecte cuándo se realiza el seguimiento de la mano del usuario y proporcione comentarios al usuario.
- Use un gesto de navegación para girar nuestros hologramas.
- Proporcione comentarios cuando la mano del usuario esté a punto de salir de la vista.
- Use eventos de manipulación para permitir que los usuarios muevan hologramas con sus manos.
En este curso, volveremos a visitar el Explorador de modelos de proyecto de Unity, que hemos creado en MR Input 210. Nuestro amigo astronauta está de vuelta para ayudarnos en nuestra exploración de estos nuevos conceptos de gestos.
Importante
Los vídeos insertados en cada uno de los capítulos siguientes se grabaron con una versión anterior de Unity y el kit de herramientas de Mixed Reality. Aunque las instrucciones paso a paso son precisas y actuales, es posible que vea scripts y objetos visuales en los vídeos correspondientes obsoletos. Los vídeos permanecen incluidos para la posteridad y porque los conceptos tratados siguen siendo aplicables.
Compatibilidad con dispositivos
Curso | HoloLens | Cascos envolventes |
---|---|---|
Entrada de realidad mixta (211): Gesto | ✔️ | ✔️ |
Antes de empezar
Requisitos previos
- Un equipo Windows 10 configurado con las herramientas correctas instaladas.
- Algunas capacidades básicas de programación de C#.
- Debe haber completado mr Basics 101.
- Debe haber completado mr Input 210.
- Un dispositivo HoloLens configurado para el desarrollo.
Archivos de proyecto
- Descargue los archivos necesarios para el proyecto. Requiere Unity 2017.2 o posterior.
- Desenarchive los archivos en el escritorio u otra ubicación fácil de llegar.
Nota
Si desea examinar el código fuente antes de descargarlo, está disponible en GitHub.
Errata y Notes
- "Habilitar solo mi código" debe deshabilitarse (desactivada) en Visual Studio en Herramientas-Opciones-Depuración>> para alcanzar puntos de interrupción en el código.
Capítulo 0: Configuración de Unity
Instrucciones
- Inicie Unity.
- Seleccione Open (Abrir).
- Vaya a la carpeta Gesto que desenarchivó anteriormente.
- Busque y seleccione la carpeta Explorador de modelos de inicio/.
- Haga clic en el botón Seleccionar carpeta .
- En el panel Proyecto , expanda la carpeta Escenas .
- Haga doble clic en ModelExplorer scene (Escena de ModelExplorer ) para cargarla en Unity.
Compilación
- En Unity, seleccione Configuración de compilación de archivos>.
- Si Scenes/ModelExplorer no aparece en Escenas en compilación, haga clic en Agregar escenas abiertas para agregar la escena.
- Si está desarrollando específicamente para HoloLens, establezca Dispositivo de destino en HoloLens. De lo contrario, déjelo en Cualquier dispositivo.
- Asegúrese de que el tipo de compilación está establecido en D3D y el SDK está establecido en Latest installed (que debe ser SDK 16299 o posterior).
- Haga clic en Generar.
- Cree una nueva carpeta denominada "App".
- Haga clic en la carpeta Aplicación .
- Presione Seleccionar carpeta y Unity comenzará a compilar el proyecto para Visual Studio.
Cuando haya terminado Unity, aparecerá una ventana de Explorador de archivos.
- Abra la carpeta Aplicación .
- Abra la solución ModelExplorer de Visual Studio.
Si se implementa en HoloLens:
- Con la barra de herramientas superior de Visual Studio, cambie el destino de Depurar a Versión y de ARM a x86.
- Haga clic en la flecha desplegable situada junto al botón Equipo local y seleccione Máquina remota.
- Escriba la dirección IP del dispositivo HoloLens y establezca Modo de autenticación en Universal (Protocolo sin cifrar). Haga clic en Seleccionar. Si no conoce la dirección IP del dispositivo, consulte Configuración > Red & Opciones avanzadas de Internet>.
- En la barra de menús superior, haga clic en Depurar -> Iniciar sin depurar o presione Ctrl + F5. Si esta es la primera vez que se implementa en el dispositivo, deberá emparejarla con Visual Studio.
- Cuando la aplicación se haya implementado, descarte fitbox con un gesto de selección.
Si se implementa en un casco envolvente:
- Con la barra de herramientas superior de Visual Studio, cambie el destino de Depurar a Release y de ARM a x64.
- Asegúrese de que el destino de implementación está establecido en Equipo local.
- En la barra de menús superior, haga clic en Depurar -> Iniciar sin depurar o presione Ctrl + F5.
- Cuando la aplicación se haya implementado, descarte fitbox mediante la extracción del desencadenador en un controlador de movimiento.
Nota
Es posible que observe algunos errores rojos en el panel Errores de Visual Studio. Es seguro ignorarlos. Cambie al panel Salida para ver el progreso real de la compilación. Los errores en el panel Salida requerirán que realice una corrección (la mayoría de las veces se deben a un error en un script).
Capítulo 1: Comentarios detectados a mano
Objetivos
- Suscríbase a eventos de seguimiento de manos.
- Use comentarios del cursor para mostrar a los usuarios cuando se realiza un seguimiento de una mano.
Nota
En HoloLens 2 , las manos detectadas se activan cada vez que las manos están visibles (no solo cuando un dedo apunta hacia arriba).
Instrucciones
- En el panel Jerarquía , expanda el objeto InputManager .
- Busque y seleccione el objeto GesturesInput .
El script InteractionInputSource.cs realiza estos pasos:
- Se suscribe a los eventos InteractionSourceDetected e InteractionSourceLost.
- Establece el estado HandDetected.
- Cancela la suscripción de los eventos InteractionSourceDetected e InteractionSourceLost.
A continuación, actualizaremos el cursor de MR Input 210 en uno que muestre comentarios en función de las acciones del usuario.
- En el panel Jerarquía , seleccione el objeto Cursor y elimínelo.
- En el panel Proyecto , busque CursorWithFeedback y arrástrelo al panel Jerarquía .
- Haga clic en InputManager en el panel Hierarchy (Jerarquía) y arrastre el objeto CursorWithFeedback desde hierarchy (Jerarquía) hasta el campo Cursor de SimpleSinglePointerSelector del InputManager, en la parte inferior del Inspector.
- Haga clic en CursorWithFeedback en la jerarquía.
- En el panel Inspector , expanda Datos de estado del cursor en el script de cursor de objeto .
Los datos de estado del cursor funcionan de la siguiente manera:
- Cualquier estado Observe significa que no se detecta ninguna mano y el usuario simplemente busca alrededor.
- Cualquier estado interactúe significa que se detecta una mano o un controlador.
- Cualquier estado Hover significa que el usuario está mirando un holograma.
Compilación e implementación
- En Unity, use configuración de compilación de archivos > para volver a generar la aplicación.
- Abra la carpeta Aplicación .
- Si aún no está abierto, abra la solución ModelExplorer de Visual Studio.
- (Si ya ha compilado o implementado este proyecto en Visual Studio durante la configuración, puede abrir esa instancia de VS y hacer clic en "Volver a cargar todo" cuando se le solicite).
- En Visual Studio, haga clic en Depurar-> Iniciar sin depurar o presione Ctrl + F5.
- Después de que la aplicación se implemente en HoloLens, descarte la caja de ajuste mediante el gesto de pulsar en el aire.
- Mueva la mano a la vista y apunte el dedo índice al cielo para comenzar el seguimiento de la mano.
- Mueva la mano a la izquierda, derecha, arriba y abajo.
- Observe cómo cambia el cursor cuando se detecta la mano y, a continuación, se pierde de la vista.
- Si está en un casco envolvente, tendrá que conectarse y desconectar el controlador. Estos comentarios se vuelven menos interesantes en un dispositivo inmersivo, ya que un controlador conectado siempre estará "disponible".
Capítulo 2: Navegación
Objetivos
- Use eventos de gestos de navegación para rotar al astronauta.
Instrucciones
Para usar gestos de navegación en nuestra aplicación, vamos a editar GestureAction.cs para girar objetos cuando se produzca el gesto de navegación. Además, agregaremos comentarios al cursor para que se muestren cuando la navegación esté disponible.
- En el panel Jerarquía , expanda CursorWithFeedback.
- En la carpeta Holograms , busque el recurso ScrollFeedback .
- Arrastre y coloque el objeto prefabricado ScrollFeedback en el objeto GameObject CursorWithFeedback en la jerarquía.
- Haga clic en CursorWithFeedback.
- En el panel Inspector , haga clic en el botón Agregar componente .
- En el menú, escriba el cuadro de búsqueda CursorFeedback. Seleccione el resultado de la búsqueda.
- Arrastre y coloque el objeto ScrollFeedback desde hierarchy hasta la propiedad Scroll Detected Game Object (Objeto de juego detectado ) en el componente Cursor Feedback (Comentarios del cursor ) del Inspector.
- En el panel Jerarquía , seleccione el objeto AstroMan .
- En el panel Inspector , haga clic en el botón Agregar componente .
- En el menú, escriba la acción gesto del cuadro de búsqueda. Seleccione el resultado de la búsqueda.
A continuación, abra GestureAction.cs en Visual Studio. En el ejercicio de codificación 2.c, edite el script para hacer lo siguiente:
- Girar el objeto AstroMan cada vez que se realiza un gesto de navegación.
- Calcule rotationFactor para controlar la cantidad de rotación aplicada al objeto.
- Gire el objeto alrededor del eje Y cuando el usuario mueva la mano a la izquierda o a la derecha.
Complete los ejercicios de codificación 2.c en el script o reemplace el código por la solución completada a continuación:
using HoloToolkit.Unity.InputModule;
using UnityEngine;
/// <summary>
/// GestureAction performs custom actions based on
/// which gesture is being performed.
/// </summary>
public class GestureAction : MonoBehaviour, INavigationHandler, IManipulationHandler, ISpeechHandler
{
[Tooltip("Rotation max speed controls amount of rotation.")]
[SerializeField]
private float RotationSensitivity = 10.0f;
private bool isNavigationEnabled = true;
public bool IsNavigationEnabled
{
get { return isNavigationEnabled; }
set { isNavigationEnabled = value; }
}
private Vector3 manipulationOriginalPosition = Vector3.zero;
void INavigationHandler.OnNavigationStarted(NavigationEventData eventData)
{
InputManager.Instance.PushModalInputHandler(gameObject);
}
void INavigationHandler.OnNavigationUpdated(NavigationEventData eventData)
{
if (isNavigationEnabled)
{
/* TODO: DEVELOPER CODING EXERCISE 2.c */
// 2.c: Calculate a float rotationFactor based on eventData's NormalizedOffset.x multiplied by RotationSensitivity.
// This will help control the amount of rotation.
float rotationFactor = eventData.NormalizedOffset.x * RotationSensitivity;
// 2.c: transform.Rotate around the Y axis using rotationFactor.
transform.Rotate(new Vector3(0, -1 * rotationFactor, 0));
}
}
void INavigationHandler.OnNavigationCompleted(NavigationEventData eventData)
{
InputManager.Instance.PopModalInputHandler();
}
void INavigationHandler.OnNavigationCanceled(NavigationEventData eventData)
{
InputManager.Instance.PopModalInputHandler();
}
void IManipulationHandler.OnManipulationStarted(ManipulationEventData eventData)
{
if (!isNavigationEnabled)
{
InputManager.Instance.PushModalInputHandler(gameObject);
manipulationOriginalPosition = transform.position;
}
}
void IManipulationHandler.OnManipulationUpdated(ManipulationEventData eventData)
{
if (!isNavigationEnabled)
{
/* TODO: DEVELOPER CODING EXERCISE 4.a */
// 4.a: Make this transform's position be the manipulationOriginalPosition + eventData.CumulativeDelta
}
}
void IManipulationHandler.OnManipulationCompleted(ManipulationEventData eventData)
{
InputManager.Instance.PopModalInputHandler();
}
void IManipulationHandler.OnManipulationCanceled(ManipulationEventData eventData)
{
InputManager.Instance.PopModalInputHandler();
}
void ISpeechHandler.OnSpeechKeywordRecognized(SpeechEventData eventData)
{
if (eventData.RecognizedText.Equals("Move Astronaut"))
{
isNavigationEnabled = false;
}
else if (eventData.RecognizedText.Equals("Rotate Astronaut"))
{
isNavigationEnabled = true;
}
else
{
return;
}
eventData.Use();
}
}
Observará que los demás eventos de navegación ya están rellenados con cierta información. Insertamos gameObject en la pila modal inputSystem del kit de herramientas, por lo que el usuario no tiene que mantener el foco en el astronauta una vez que se haya iniciado la rotación. En consecuencia, quitamos gameObject de la pila una vez completado el gesto.
Compilación e implementación
- Recompile la aplicación en Unity y, a continuación, compile e implemente desde Visual Studio para ejecutarla en HoloLens.
- Mira al astronauta, deben aparecer dos flechas en cualquier lado del cursor. Este nuevo objeto visual indica que el astronauta se puede girar.
- Coloque la mano en la posición lista (el dedo índice apunta hacia el cielo) para que HoloLens empiece a rastrear la mano.
- Para girar al astronauta, reduzca el dedo índice a una posición de pellizco y, a continuación, mueva la mano izquierda o derecha para desencadenar el gesto NavigationX.
Capítulo 3: Guía manual
Objetivos
- Use la puntuación de guía de mano para ayudar a predecir cuándo se perderá el seguimiento de la mano.
- Proporcione comentarios sobre el cursor para mostrar cuándo la mano del usuario está cerca del borde de la vista de la cámara.
Instrucciones
- En el panel Hierarchy (Jerarquía ), seleccione el objeto CursorWithFeedback .
- En el panel Inspector , haga clic en el botón Agregar componente .
- En el menú, escriba el cuadro de búsqueda Guía manual. Seleccione el resultado de la búsqueda.
- En la carpeta Hologramas del panel Proyecto, busque el recurso HandGuidanceFeedback.
- Arrastre y coloque el recurso HandGuidanceFeedback en la propiedad Indicador de guía de mano en el panel Inspector .
Compilación e implementación
- Recompile la aplicación en Unity y, a continuación, compile e implemente desde Visual Studio para experimentar la aplicación en HoloLens.
- Ponga la mano a la vista y levante el dedo índice para que se realice el seguimiento.
- Comience a girar el astronauta con el gesto de navegación (pellizque el dedo índice y el pulgar juntos).
- Mueve tu mano a la izquierda, derecha, arriba y abajo.
- A medida que la mano se acerca al borde del marco de gesto, debe aparecer una flecha junto al cursor para advertirle de que se perderá el seguimiento de la mano. La flecha indica la dirección que se va a mover la mano para evitar que se pierda el seguimiento.
Capítulo 4: Manipulación
Objetivos
- Usa eventos de manipulación para mover al astronauta con las manos.
- Proporcione comentarios sobre el cursor para que el usuario sepa cuándo se puede usar la manipulación.
Instrucciones
GestureManager.cs y AstronautManager.cs nos permitirán hacer lo siguiente:
- Use la palabra clave de voz "Move Astronaut" (Mover astronauta) para habilitar gestos de manipulación y "Rotate Astronaut" para deshabilitarlos.
- Cambie a responder al reconocedor de gestos de manipulación.
Empecemos.
- En el panel Hierarchy (Jerarquía ), cree un gameObject vacío. Asígnelo el nombre "AstronautManager".
- En el panel Inspector , haga clic en el botón Agregar componente .
- En el menú, escriba el cuadro de búsqueda Administrador de astronautas. Seleccione el resultado de la búsqueda.
- En el panel Inspector , haga clic en el botón Agregar componente .
- En el menú, escriba el cuadro de búsqueda Origen de entrada de voz. Seleccione el resultado de la búsqueda.
Ahora agregaremos los comandos de voz necesarios para controlar el estado de interacción del astronauta.
- Expanda la sección Palabras clave del Inspector.
- Haga clic en el + lado derecho para agregar una nueva palabra clave.
- Escriba la palabra clave como Mover astronauta. Si lo desea, no dude en agregar un acceso directo de teclas.
- Haga clic en el + lado derecho para agregar una nueva palabra clave.
- Escriba la palabra clave como Rotate Astronaut. Si lo desea, no dude en agregar un acceso directo de teclas.
- El código de controlador correspondiente se puede encontrar en GestureAction.cs, en el controlador ISpeechHandler.OnSpeechKeywordRecognized .
A continuación, configuraremos los comentarios de manipulación en el cursor.
- En la carpeta Hologramas del panel Proyecto, busque el recurso PathingFeedback.
- Arrastre y coloque el objeto prefabricado PathingFeedback en el objeto CursorWithFeedback de la jerarquía.
- En el panel Jerarquía , haga clic en CursorWithFeedback.
- Arrastre y coloque el objeto PathingFeedback de la jerarquía en la propiedad Objeto de juego detectado pathing en el componente Cursor Feedback (Comentarios del cursor ) del inspector.
Ahora es necesario agregar código a GestureAction.cs para habilitar lo siguiente:
- Agregue código a la función IManipulationHandler.OnManipulationUpdated , que moverá al astronauta cuando se detecte un gesto de manipulación .
- Calcule el vector de movimiento para determinar a dónde se debe mover el astronauta en función de la posición de la mano.
- Mueva al astronauta a la nueva posición.
Complete el ejercicio de codificación 4.a en GestureAction.cs o use nuestra solución completa a continuación:
using HoloToolkit.Unity.InputModule;
using UnityEngine;
/// <summary>
/// GestureAction performs custom actions based on
/// which gesture is being performed.
/// </summary>
public class GestureAction : MonoBehaviour, INavigationHandler, IManipulationHandler, ISpeechHandler
{
[Tooltip("Rotation max speed controls amount of rotation.")]
[SerializeField]
private float RotationSensitivity = 10.0f;
private bool isNavigationEnabled = true;
public bool IsNavigationEnabled
{
get { return isNavigationEnabled; }
set { isNavigationEnabled = value; }
}
private Vector3 manipulationOriginalPosition = Vector3.zero;
void INavigationHandler.OnNavigationStarted(NavigationEventData eventData)
{
InputManager.Instance.PushModalInputHandler(gameObject);
}
void INavigationHandler.OnNavigationUpdated(NavigationEventData eventData)
{
if (isNavigationEnabled)
{
/* TODO: DEVELOPER CODING EXERCISE 2.c */
// 2.c: Calculate a float rotationFactor based on eventData's NormalizedOffset.x multiplied by RotationSensitivity.
// This will help control the amount of rotation.
float rotationFactor = eventData.NormalizedOffset.x * RotationSensitivity;
// 2.c: transform.Rotate around the Y axis using rotationFactor.
transform.Rotate(new Vector3(0, -1 * rotationFactor, 0));
}
}
void INavigationHandler.OnNavigationCompleted(NavigationEventData eventData)
{
InputManager.Instance.PopModalInputHandler();
}
void INavigationHandler.OnNavigationCanceled(NavigationEventData eventData)
{
InputManager.Instance.PopModalInputHandler();
}
void IManipulationHandler.OnManipulationStarted(ManipulationEventData eventData)
{
if (!isNavigationEnabled)
{
InputManager.Instance.PushModalInputHandler(gameObject);
manipulationOriginalPosition = transform.position;
}
}
void IManipulationHandler.OnManipulationUpdated(ManipulationEventData eventData)
{
if (!isNavigationEnabled)
{
/* TODO: DEVELOPER CODING EXERCISE 4.a */
// 4.a: Make this transform's position be the manipulationOriginalPosition + eventData.CumulativeDelta
transform.position = manipulationOriginalPosition + eventData.CumulativeDelta;
}
}
void IManipulationHandler.OnManipulationCompleted(ManipulationEventData eventData)
{
InputManager.Instance.PopModalInputHandler();
}
void IManipulationHandler.OnManipulationCanceled(ManipulationEventData eventData)
{
InputManager.Instance.PopModalInputHandler();
}
void ISpeechHandler.OnSpeechKeywordRecognized(SpeechEventData eventData)
{
if (eventData.RecognizedText.Equals("Move Astronaut"))
{
isNavigationEnabled = false;
}
else if (eventData.RecognizedText.Equals("Rotate Astronaut"))
{
isNavigationEnabled = true;
}
else
{
return;
}
eventData.Use();
}
}
Compilación e implementación
- Recompile en Unity y, a continuación, compile e implemente desde Visual Studio para ejecutar la aplicación en HoloLens.
- Mueva la mano delante de HoloLens y levante el dedo índice para que se pueda realizar un seguimiento.
- Centre el cursor sobre el astronauta.
- Diga "Mover astronauta" para mover al astronauta con un gesto de manipulación.
- Las cuatro flechas deben aparecer alrededor del cursor para indicar que el programa responderá ahora a eventos de manipulación.
- Bajar el dedo índice hacia abajo hasta el pulgar y mantenerlos reducidos juntos.
- A medida que mueve la mano, el astronauta también se moverá (esto es Manipulación).
- Levante el dedo índice para dejar de manipular al astronauta.
- Nota: Si no dices "Mover astronauta" antes de mover la mano, se usará el gesto de navegación en su lugar.
- Diga "Girar astronauta" para volver al estado giratorio.
Capítulo 5: Expansión del modelo
Objetivos
- Expanda el modelo de astronauta en varias partes más pequeñas con las que el usuario pueda interactuar.
- Mueva cada pieza individualmente mediante gestos de navegación y manipulación.
Instrucciones
En esta sección, realizaremos las siguientes tareas:
- Agregue una nueva palabra clave "Expandir modelo" para expandir el modelo de astronauta.
- Agregue una nueva palabra clave "Reset Model" para devolver el modelo a su formulario original.
Para ello, agregaremos dos palabras clave más al origen de entrada de voz del capítulo anterior. También mostraremos otra manera de controlar los eventos de reconocimiento.
- Haga clic de nuevo en AstronautManager en el Inspector y expanda la sección Palabras clave del Inspector.
- Haga clic en el + lado derecho para agregar una nueva palabra clave.
- Escriba la palabra clave como Expandir modelo. Si lo desea, no dude en agregar un acceso directo de teclas.
- Haga clic en el + lado derecho para agregar una nueva palabra clave.
- Escriba la palabra clave como Reset Model (Restablecer modelo). Si lo desea, no dude en agregar un acceso directo de teclas.
- En el panel Inspector , haga clic en el botón Agregar componente .
- En el menú, escriba el cuadro de búsqueda Controlador de entrada de voz. Seleccione el resultado de la búsqueda.
- Compruebe Is Global Listener (Es agente de escucha global), ya que queremos que estos comandos funcionen independientemente de GameObject que nos centremos.
- Haga clic en el + botón y seleccione Expandir modelo en la lista desplegable Palabra clave.
- Haga clic en la + opción Respuesta y arrastre el AstronautManager desde la jerarquía al campo Ninguno (objeto).
- Ahora, haga clic en la lista desplegable Sin función , seleccione AstronautManager y expandaModelCommand.
- Haga clic en el botón del + controlador de entrada de voz y seleccione Restablecer modelo en la lista desplegable Palabra clave.
- Haga clic en la + opción Respuesta y arrastre el AstronautManager desde la jerarquía al campo Ninguno (objeto).
- Ahora, haga clic en la lista desplegable Sin función , seleccione AstronautManager y, a continuación, ResetModelCommand.
Compilación e implementación
- ¡Pruébelo! Compile e implemente la aplicación en HoloLens.
- Diga Expandir modelo para ver el modelo de astronauta expandido.
- Utilice navegación para girar piezas individuales del traje de astronauta.
- Diga Mover astronauta y, a continuación, use Manipulación para mover piezas individuales del traje de astronauta.
- Di Girar astronauta para volver a girar las piezas.
- Diga Reset Model (Restablecer modelo ) para devolver al astronauta a su forma original.
Fin
¡Enhorabuena! Ya ha completado MR Input 211: Gesture( Entrada de MR 211: Gesto).
- Sabe cómo detectar y responder a eventos de seguimiento manual, navegación y manipulación.
- Comprende la diferencia entre los gestos de navegación y manipulación.
- Sabe cómo cambiar el cursor para proporcionar comentarios visuales para cuando se detecta una mano, cuando una mano está a punto de perderse y para cuando un objeto admite interacciones diferentes (navegación frente a manipulación).