Selección de destino compatible con los ojosEye-supported target selection

MRTK

En esta página se de abordan diferentes opciones para acceder a los datos de mirada con los ojos y a eventos específicos de mirada con los ojos para seleccionar destinos en MRTK.This page discusses different options for accessing eye gaze data and eye gaze specific events to select targets in MRTK. El seguimiento de los ojos permite realizar selecciones de destino rápidas y sin esfuerzo mediante una combinación de información sobre lo que un usuario está viendo con entradas adicionales, como el seguimiento de manos y los comandos de voz:Eye tracking allows for fast and effortless target selections using a combination of information about what a user is looking at with additional inputs such as hand tracking and voice commands:

  • Busque & "Seleccionar" (comando de voz predeterminado)Look & Say "Select" (default voice command)
  • Busque & "Explode" o "Pop" (comandos de voz personalizados)Look & Say "Explode" or "Pop" (custom voice commands)
  • Buscar & de BluetoothLook & Bluetooth button
  • Busque & acercar (es decir, mantener la mano delante de usted y reunir el dedo índice y el dedo)Look & Pinch (i.e., hold up your hand in front of you and bring your thumb and index finger together)

Para seleccionar contenido holográfico mediante la mirada con los ojos, hay varias opciones:To select holographic content using eye gaze, there are several options:

1. Use el puntero de foco principal:1. Use the primary focus pointer:

Esto se puede entender como el cursor priorizado.This can be understood as your prioritized cursor. De forma predeterminada, si las manos están a la vista, serían rayos de mano.By default, if the hands are in view, then this would be hand rays. Si no hay manos a la vista, el puntero con prioridad sería la mirada con la cabeza o los ojos.If no hands are in view, then the prioritized pointer would be head or eye gaze. Por lo tanto, tenga en cuenta que, en función del diseño actual, la mirada con la cabeza o los ojos se suprime como entrada de cursor si se usan rayos de mano.Thus, please note that based on the current design head or eye gaze is suppressed as a cursor input if hand rays are used.

Por ejemplo:For example:

Un usuario quiere seleccionar un botón holográfico lejano.A user wants to select a distant holographic button. Como desarrollador, quiere proporcionar una solución flexible que permita al usuario realizar estas tareas en varias condiciones:As a developer, you want to provide a flexible solution that allows the user to achieve this tasks in various conditions:

  • Subir hasta el botón y descándalo.Walk up to the button and poke it
  • Míralo desde una distancia y diga "seleccionar"Look at it from a distance and say "select"
  • Dirigir el botón mediante un rayo de mano y realizar una acción de acercamiento. En este caso, la solución más flexible es usar el controlador de foco principal, ya que le notificará cada vez que el puntero de foco principal con prioridad actual desencadene un evento.Target the button using a hand ray and performing a pinch In this case, the most flexible solution is to use the primary focus handler as it will notify you whenever the currently prioritized primary focus pointer triggers an event. Tenga en cuenta que si los rayos de las manos están habilitados, el puntero de foco de mirada con la cabeza o los ojos se deshabilita en cuanto las manos se ven.Please note that if hand rays are enabled, the head or eye gaze focus pointer are disabled as soon as the hands come into view.

Importante

Tenga en cuenta que si los rayos de las manos están habilitados, el puntero de foco de mirada con la cabeza o los ojos se deshabilita en cuanto las manos se ven.Please note that if hand rays are enabled, the head or eye gaze focus pointer are disabled as soon as the hands come into view. Si desea admitir una interacción de "buscary acercar", debe deshabilitar el rayo de mano .If you want to support a 'look and pinch' interaction, you need to disable the hand ray. En nuestras escenas de ejemplo de seguimiento de los ojos, hemos deshabilitado el rayo de la mano para permitir que se muestren interacciones más enriquecciones con los ojos y los movimientos de las manos; vea por ejemplo Posición compatible con los ojos.In our eye tracking sample scenes, we have disabled the hand ray to allow for showcasing richer interactions using eyes + hand motions - see for example Eye-Supported Positioning.

2. Use el foco de los ojos y los rayos de las manos al mismo tiempo:2. Use both eye focus and hand rays at the same time:

Puede haber instancias en las que quiera ser más específico qué tipo de punteros de foco pueden desencadenar determinados eventos y permitir el uso simultáneo de varias técnicas de interacción lejana.There might be instances where you want to be more specific which type of focus pointers can trigger certain events and allow for simultaneously using multiple far interaction techniques.

Por ejemplo: en la aplicación, un usuario puede usar rayos de mano lejanos para manipular algunas configuraciones mecánicas holográficas, por ejemplo, agarrar y retener algunas partes lejanas del motor holográfico y mantenerlas en su lugar.For example: In your app, a user can use far hand rays to manipulate some holographic mechanical setup - e.g., grab and hold some distant holographic engine parts and hold them in place. Al hacerlo, el usuario tiene que seguir una serie de instrucciones y registrar su progreso marcando algunas casillas.While doing so, the user has to go through a number of instructions and record her/his progress by marking off some check boxes. Si el usuario no tiene las manos ocupadas, sería instintivo simplemente tocar la casilla o seleccionarla con un rayo de mano.If the user has her/his hands not busy, it would be instinctual to simply touch the check box or select it using a hand ray. Sin embargo, si el usuario tiene las manos ocupadas, como en nuestro caso, con algunas partes del motor holográfico en su lugar, quiere permitir que el usuario se desplace sin problemas por las instrucciones con la mirada con los ojos y simplemente mire una casilla y diga "comprobarlo".However, if the user has her/his hands busy, as in our case holding some holographic engine parts in place, you want to enable the user to seamlessly scroll through the instructions using their eye gaze and to simply look at a check box and say "check it!".

Para habilitar esto, debe usar un script EyeTrackingTarget específico de los ojos que sea independiente de los principales focusHandlers de MRTK y que se analizará más adelante.To enable this, you need to use eye-specific EyeTrackingTarget script that is independent from the core MRTK FocusHandlers and will be discussed further below.

1. Usar controladores genéricos de puntero y foco1. Use generic focus and pointer handlers

Si el seguimiento de los ojos está configurado correctamente (consulte Configuración básica de MRTKpara usar el seguimiento de los ojos), permitir a los usuarios seleccionar hologramas con sus ojos es lo mismo que para cualquier otra entrada de foco (por ejemplo, mirada con la cabeza o rayo de la mano). Esto proporciona la gran ventaja de una manera flexible de interactuar con los hologramas mediante la definición del tipo de foco principal en el perfil de puntero de entrada de MRTK en función de las necesidades del usuario, a la vez que deja el código intacto.If eye tracking is set up correctly (see Basic MRTK setup to use eye tracking), enabling users to select holograms using their eyes is the same as for any other focus input (e.g., head gaze or hand ray).This provides the great advantage of a flexible way to interact with your holograms by defining the main focus type in your MRTK Input Pointer Profile depending on your user's needs, while leaving your code untouched. Esto permite cambiar entre la mirada con la cabeza o los ojos sin cambiar una línea de código ni reemplazar los rayos de las manos por el objetivo de los ojos para interacciones lejanas.This allows for switching between head or eye gaze without changing a line of code or replace hand rays with eye targeting for far interactions.

Centrarse en un hologramaFocusing on a hologram

Para detectar cuándo se centra un holograma, use la interfaz "IMixedRealityFocusHandler", que proporciona dos miembros de interfaz: OnFocusEnter y OnFocusExit.To detect when a hologram is focused, use the 'IMixedRealityFocusHandler' interface that provides you with two interface members: OnFocusEnter and OnFocusExit.

Este es un ejemplo sencillo de ColorTap.cs para cambiar el color de un holograma cuando se mira.Here is a simple example from ColorTap.cs to change a hologram's color when being looked at.

public class ColorTap : MonoBehaviour, IMixedRealityFocusHandler
{
    void IMixedRealityFocusHandler.OnFocusEnter(FocusEventData eventData)
    {
        material.color = color_OnHover;
    }

    void IMixedRealityFocusHandler.OnFocusExit(FocusEventData eventData)
    {
        material.color = color_IdleState;
    }
    ...
}

Selección de un holograma centradoSelecting a focused hologram

Para seleccionar un holograma centrado, use PointerHandler para escuchar eventos de entrada y confirmar una selección.To select a focused hologram, use PointerHandler to listen for input events to confirm a selection. Por ejemplo, agregar IMixedRealityPointerHandler hará que reaccionen a una entrada de puntero simple.For example, adding the IMixedRealityPointerHandler will make them react to simple pointer input. La interfaz IMixedRealityPointerHandler requiere la implementación de los tres miembros de interfaz siguientes: OnPointerUp, OnPointerDown y OnPointerClicked.The IMixedRealityPointerHandler interface requires implementing the following three interface members: OnPointerUp, OnPointerDown, and OnPointerClicked.

En el ejemplo siguiente, cambiamos el color de un holograma; para ello, lo miramos y nos acercamos o indicamos "seleccionar".In the example below, we change the color of a hologram by looking at it and pinching or saying "select". La acción necesaria para desencadenar el evento se define mediante la cual podemos establecer el tipo de en el Editor de Unity: de forma predeterminada, es la eventData.MixedRealityInputAction == selectAction selectAction acción "Seleccionar".The required action to trigger the event is defined by eventData.MixedRealityInputAction == selectAction whereby we can set the type of selectAction in the Unity Editor - by default it's the "Select" action. Los tipos de MixedRealityInputActions disponibles se pueden configurar en el perfil de MRTK mediante acciones de entrada de entrada del perfil de configuración de MRTK. -> -> The types of available MixedRealityInputActions can be configured in the MRTK Profile via MRTK Configuration Profile -> Input -> Input Actions.

public class ColorTap : MonoBehaviour, IMixedRealityFocusHandler, IMixedRealityPointerHandler
{
    // Allow for editing the type of select action in the Unity Editor.
    [SerializeField]
    private MixedRealityInputAction selectAction = MixedRealityInputAction.None;
    ...

    void IMixedRealityPointerHandler.OnPointerUp(MixedRealityPointerEventData eventData)
    {
        if (eventData.MixedRealityInputAction == selectAction)
        {
            material.color = color_OnHover;
        }
    }

    void IMixedRealityPointerHandler.OnPointerDown(MixedRealityPointerEventData eventData)
    {
        if (eventData.MixedRealityInputAction == selectAction)
        {
            material.color = color_OnSelect;
        }
    }

    void IMixedRealityPointerHandler.OnPointerClicked(MixedRealityPointerEventData eventData) { }
}

BaseEyeFocusHandler específico de la mirada con los ojosEye-gaze-specific BaseEyeFocusHandler

Dado que la mirada con los ojos puede ser muy diferente a otras entradas de puntero, es posible que quiera asegurarse de reaccionar solo a la entrada de foco si es la mirada con los ojos y actualmente es el puntero de entrada principal.Given that eye gaze can be very different to other pointer inputs, you may want to make sure to only react to the focus input if it is eye gaze and it is currently the primary input pointer. Para este propósito, usaría el que es específico del seguimiento de BaseEyeFocusHandler los ojos y que deriva de BaseFocusHandler .For this purpose, you would use the BaseEyeFocusHandler which is specific to eye tracking and which derives from the BaseFocusHandler. Como se mencionó anteriormente, solo se desencadenará si el objetivo de la mirada con los ojos es actualmente la entrada del puntero principal (es decir, no hay ningún rayo de mano activo).As mentioned before, it will only trigger if eye gaze targeting is currently the primary pointer input (i.e., no hand ray is active). Para obtener más información, consulte Compatibilidad con la mirada con los ojos y los gestos de la mano.For more information, see How to support eye gaze + hand gestures.

Este es un ejemplo de EyeTrackingDemo-03-Navigation (Assets/MRTK/Examples/Demos/EyeTracking/Scenes).Here is an example from EyeTrackingDemo-03-Navigation (Assets/MRTK/Examples/Demos/EyeTracking/Scenes). En esta demostración, hay dos hologramas 3D que se activarán en función de la parte del objeto que se examina: si el usuario mira el lado izquierdo del holograma, esa parte se moverá lentamente hacia la parte frontal orientada al usuario.In this demo, there are two 3D holograms that will turn depending on which part of the object is looked at: If the user looks at the left side of the hologram, then that part will slowly move towards the front facing the user. Si se mira el lado derecho, esa parte se moverá lentamente al frente.If the right side is looked at, then that part will slowly move to the front. Se trata de un comportamiento que es posible que no quiera tener activo en todo momento y también algo que es posible que no quiera desencadenar accidentalmente mediante un rayo de mano o la mirada con la cabeza.This is a behavior that you may not want to have active at all times and also something that you may not want to accidentally trigger by a hand ray or head gaze. Si se OnLookAtRotateByEyeGaze adjunta, un Objeto GameObject gira mientras se mira.Having the OnLookAtRotateByEyeGaze attached, a GameObject will rotate while being looked at.

public class OnLookAtRotateByEyeGaze : BaseEyeFocusHandler
{
    ...

    protected override void OnEyeFocusStay()
    {
        // Update target rotation
        RotateHitTarget();
    }

    ...

    ///
    /// This function computes the rotation of the target to move the currently
    /// looked at aspect slowly to the front.
    ///
    private void RotateHitTarget()
    {
        // Example for querying the hit position of the eye gaze ray using EyeGazeProvider
        Vector3 TargetToHit = (this.gameObject.transform.position - InputSystem.EyeGazeProvider.HitPosition).normalized;

        ...
    }
}

Consulte la documentación de la API para obtener una lista completa de los eventos disponibles de BaseEyeFocusHandler :Check the API documentation for a complete list of available events of the BaseEyeFocusHandler:

  • OnEyeFocusStart: Se desencadena una vez que el rayo de mirada con los ojos comienza a formar una intersección con el colisionador de este objetivo.OnEyeFocusStart: Triggered once the eye gaze ray starts intersecting with this target's collider.
  • OnEyeFocusFocus: Se desencadena mientras el rayo de mirada con los ojos forma una intersección con el colisionador de este objetivo.OnEyeFocusStay: Triggered while the eye gaze ray is intersecting with this target's collider.
  • OnEyeFocusStop: Se desencadena una vez que el rayo de mirada con los ojos deja de formar intersección con el colisionador de este objetivo.OnEyeFocusStop: Triggered once the eye gaze ray stops intersecting with this target's collider.
  • OnEyeFocusDwell: Se desencadena una vez que el rayo de mirada con los ojos se ha intersecado con el colisionador de este objetivo durante un período de tiempo especificado.OnEyeFocusDwell: Triggered once the eye gaze ray has intersected with this target's collider for a specified amount of time.

2. EyeTrackingTarget específico de la mirada con los ojos independiente2. Independent eye-gaze-specific EyeTrackingTarget

Por último, le proporcionamos una solución que le permite tratar la entrada basada en los ojos completamente independiente de otros punteros de foco a través del EyeTrackingTarget script.Finally, we provide you with a solution that let's you treat eye-based input completely independent from other focus pointers via the EyeTrackingTarget script.

Esto tiene tres ventajas:This has three advantages:

  • Puede asegurarse de que el holograma solo reacciona a la mirada con los ojos del usuario.You can make sure that the hologram is only reacting to the user's eye gaze.
  • Esto es independiente de la entrada principal activa actualmente.This is independent from the currently active primary input. Por lo tanto, puede procesar varias entradas a la vez, por ejemplo, combinando el objetivo rápido de los ojos con los gestos de la mano.Hence, you can process multiple inputs at once - for example, combining fast eye targeting with hand gestures.
  • Ya se han configurado varios eventos de Unity para que sea rápido y cómodo controlar y reutilizar los comportamientos existentes desde el Editor de Unity o a través del código.Several Unity events have already been set up to make it fast and convenient to handle and reuse existing behaviors from within the Unity Editor or via code.

También hay algunas desventajas:There are also some disadvantages:

  • Más esfuerzo para controlar entradas independientes individualmente.More effort to handle separate inputs individually.
  • Sin degradación elegante: solo admite la orientación con los ojos.No elegant degradation: It only supports eye targeting. Si el seguimiento de los ojos no funciona, necesita alguna reserva adicional.If eye tracking is not working, you require some additional fallback.

De forma similar a BaseFocusHandler, EyeTrackingTarget viene listo con varios eventos de Unity específicos de la mirada con los ojos que puede escuchar cómodamente a través del Editor de Unity (vea el ejemplo siguiente) o mediante AddListener() en el código:Similar to the BaseFocusHandler, the EyeTrackingTarget comes ready with several eye-gaze-specific Unity events that you can conveniently listen to either via the Unity Editor (see example below) or by using AddListener() in code:

  • OnLookAtStart()OnLookAtStart()
  • WhileLookingAtTarget()WhileLookingAtTarget()
  • OnLookAway()OnLookAway()
  • OnDwell()OnDwell()
  • OnSelected()OnSelected()

A continuación, le llevamos a través de algunos ejemplos sobre cómo usar EyeTrackingTarget.In the following, we walk you through a few examples for how to use EyeTrackingTarget.

Ejemplo #1: notificaciones inteligentes compatibles con los ojosExample #1: Eye-supported smart notifications

En EyeTrackingDemo-02-TargetSelection (Assets/MRTK/Examples/Demos/EyeTracking/Scenes), puede encontrar un ejemplo de "notificaciones inteligentes de notificación" que reaccionan a la mirada con los ojos.In EyeTrackingDemo-02-TargetSelection (Assets/MRTK/Examples/Demos/EyeTracking/Scenes), you can find an example for 'smart attentive notifications' that react to your eye gaze. Se trata de cuadros de texto 3D que se pueden colocar en la escena y que se ampliarán sin problemas y se volverán hacia el usuario cuando se les mira para facilitar la legibilidad.These are 3D text boxes that can be placed in the scene and that will smoothly enlarge and turn toward the user when being looked at to ease legibility. Mientras el usuario lee la notificación, la información se muestra clara y clara.While the user is reading the notification, the information keeps getting displayed crisp and clear. Después de leerla y alejarse de la notificación, la notificación se descartará automáticamente y se atenuará. Para lograr todo esto, hay algunos scripts de comportamiento genéricos que no son específicos del seguimiento ocular, como:After reading it and looking away from the notification, the notification will automatically be dismissed and fades out. To achieve all this, there are a few generic behavior scripts that are not specific to eye tracking at all, such as:

La ventaja de este enfoque es que varios eventos pueden reutilizar los mismos scripts.The advantage of this approach is that the same scripts can be reused by various events. Por ejemplo, un holograma puede empezar a enfrentarse al usuario en función de los comandos de voz o después de presionar un botón virtual.For example, a hologram may start facing the user based on a voice commands or after pressing a virtual button. Para desencadenar estos eventos, simplemente puede hacer referencia a los métodos que se deben ejecutar en el EyeTrackingTarget script que está asociado a GameObject.To trigger these events, you can simply reference the methods that should be executed in the EyeTrackingTarget script that is attached to your GameObject.

Para el ejemplo de las "notificaciones inteligentes de notificación", ocurre lo siguiente:For the example of the 'smart attentive notifications', the following happens:

  • OnLookAtStart(): la notificación comienza a...OnLookAtStart(): The notification starts to...

    • FaceUser.Engage: ... se dirige al usuario.FaceUser.Engage: ... turn toward the user.
    • ChangeSize.Engage: ... aumentar el tamaño (hasta una escala máxima especificada).ChangeSize.Engage: ... increase in size (up to a specified maximum scale).
    • BlendOut.Engage: ... comienza a combinarse en más (después de estar en un estado de inactividad más sutil).BlendOut.Engage: ... starts to blend in more (after being at a more subtle idle state).
  • OnDwell(): informa al script BlendOut de que la notificación se ha visto lo suficiente.OnDwell(): Informs the BlendOut script that the notification has been looked at sufficiently.

  • OnLookAway(): la notificación comienza a...OnLookAway(): The notification starts to...

    • FaceUser.Disengage: ... volver a su orientación original.FaceUser.Disengage: ... turn back to its original orientation.
    • ChangeSize.Disengage: ... reducir a su tamaño original.ChangeSize.Disengage: ... decrease back to its original size.
    • BlendOut.Disengage: ... comienza a combinarse: si se desencadenó OnDwell(), se mezcla completamente y se destruye; de lo contrario, vuelve a su estado de inactividad.BlendOut.Disengage: ... starts to blend out - If OnDwell() was triggered, blend out completely and destroy, otherwise back to its idle state.

Consideración de diseño: La clave de una experiencia divertida aquí es ajustar cuidadosamente la velocidad de cualquiera de estos comportamientos para evitar causar molestias al reaccionar a la mirada del usuario demasiado rápido todo el tiempo.Design consideration: The key to an enjoyable experience here is to carefully tune the speed of any of these behaviors to avoid causing discomfort by reacting to the user’s eye gaze too quickly all the time. De lo contrario, esto puede parecer muy abrumador.Otherwise this can quickly feel extremely overwhelming.

Target Notification

Ejemplo #2: la gema holográfica gira lentamente al mirarlaExample #2: Holographic gem rotates slowly when looking at it

Al igual que en el ejemplo #1, podemos crear fácilmente un comentario de mantener el puntero para nuestras gemas holográficas en la escena (Assets/MRTK/Examples/Demos/EyeTracking/Scenes) que girará lentamente en una dirección constante y a una velocidad constante (a diferencia del ejemplo de rotación anterior) cuando se EyeTrackingDemo-02-TargetSelection mira.Similar to Example #1, we can easily create a hover feedback for our holographic gems in EyeTrackingDemo-02-TargetSelection (Assets/MRTK/Examples/Demos/EyeTracking/Scenes) scene that will slowly rotate in a constant direction and at a constant speed (in contrast to the rotation example from above) when being looked at. Todo lo que necesita es desencadenar la rotación de la gema holográfica desde el evento WhileLookingAtTarget() de EyeTrackingTarget.All you need is to trigger the rotation of the holographic gem from the EyeTrackingTarget's WhileLookingAtTarget() event. A continuación se incluyen algunos detalles más:Here are a few more details:

  1. Cree un script genérico que incluya una función pública para rotar el GameObject al que está asociado.Create a generic script that includes a public function to rotate the GameObject it is attached to. A continuación se muestra un ejemplo de RotateWithConstSpeedDir.cs, donde podemos ajustar la dirección y la velocidad de rotación desde el Editor de Unity.Below is an example from RotateWithConstSpeedDir.cs where we can tweak the rotation direction and speed from the Unity Editor.

    using UnityEngine;
    
    namespace Microsoft.MixedReality.Toolkit.Examples.Demos.EyeTracking
    {
        /// <summary>
        /// The associated GameObject will rotate when RotateTarget() is called based on a given direction and speed.
        /// </summary>
        public class RotateWithConstSpeedDir : MonoBehaviour
        {
            [Tooltip("Euler angles by which the object should be rotated by.")]
            [SerializeField]
            private Vector3 RotateByEulerAngles = Vector3.zero;
    
            [Tooltip("Rotation speed factor.")]
            [SerializeField]
            private float speed = 1f;
    
            /// <summary>
            /// Rotate game object based on specified rotation speed and Euler angles.
            /// </summary>
            public void RotateTarget()
            {
                transform.eulerAngles = transform.eulerAngles + RotateByEulerAngles * speed;
            }
        }
    }
    
  2. Agregue el script al GameObject de destino y haga referencia a la EyeTrackingTarget función RotateTarget() en el desencadenador UnityEvent, como se muestra en la captura de pantalla siguiente:Add the EyeTrackingTarget script to your target GameObject and reference the RotateTarget() function in the UnityEvent trigger as shown the screenshot below:

    Ejemplo de EyeTrackingTarget

Ejemplo #3: Selección de destino compatible con la mirada con los ojos multimodalExample #3: Pop those gems aka multi-modal eye-gaze-supported target selection

En el ejemplo anterior, hemos mostrado lo fácil que es detectar si se busca un destino y cómo desencadenar una reacción a eso.In the previous example, we have shown how easy it is to detect whether a target is looked at and how to trigger a reaction to that. A continuación, vamos a hacer que las gemas se desenlomen con el evento OnSelected() de EyeTrackingTarget .Next, let's make the gems explode using the OnSelected() event from the EyeTrackingTarget. La parte interesante es cómo se desencadena la selección.The interesting part is how the selection is triggered. permite EyeTrackingTarget asignar rápidamente distintas formas de invocar una selección:The EyeTrackingTarget allows for quickly assigning different ways to invoke a selection:

  • Gesto de acercar: al establecer la opción "Seleccionar acción" en "Seleccionar", se usa el gesto de mano predeterminado para desencadenar la selección.Pinch gesture: Setting the 'Select Action' to 'Select' uses the default hand gesture to trigger the selection. Esto significa que el usuario puede simplemente elevar la mano y acercar el dedo índice y el dedo para confirmar la selección.This means that the user can simply raise their hand and pinch their thumb and index finger together to confirm the selection.

  • Diga "Seleccionar": use el comando de voz predeterminado "Seleccionar" para seleccionar un holograma.Say "Select": Use the default voice command "Select" for selecting a hologram.

  • Diga "Explode" o "Pop": para usar comandos de voz personalizados, debe seguir dos pasos:Say "Explode" or "Pop": To use custom voice commands, you need to follow two steps:

    1. Configuración de una acción personalizada como "DestroyTarget"Set up a custom action such as "DestroyTarget"

      • Vaya a MRTK -> Input -> Input ActionsNavigate to MRTK -> Input -> Input Actions
      • Haga clic en "Agregar una nueva acción".Click "Add a new action"
    2. Configure los comandos de voz que desencadenan esta acción, como "Explode" o "Pop".Set up the voice commands that trigger this action such as "Explode" or "Pop"

      • Vaya a MRTK -> Input -> SpeechNavigate to MRTK -> Input -> Speech
      • Haga clic en "Agregar un nuevo comando de voz".Click "Add a new speech command"
        • Asociación de la acción que acaba de crearAssociate the action you just created
        • Asignación de un código de clave para permitir desencadenar la acción mediante una pulsación de botónAssign a KeyCode to allow for triggering the action via a button press

Ejemplo eyeTrackingTarget de comandos de voz

Cuando se selecciona una gema, se expande, se hace un sonido y desaparece.When a gem is selected it will explode, making a sound and disappear. Esto se controla mediante el HitBehaviorDestroyOnSelect script.This is handled by the HitBehaviorDestroyOnSelect script. Tiene dos opciones:You have two options:

  • En el Editor de Unity: Simplemente puede vincular el script que está asociado a cada una de nuestras plantillas de gema al evento De Unity OnSelected() en el Editor de Unity.In the Unity Editor: You could simply link the script that is attached to each of our gem templates to the OnSelected() Unity event in the Unity Editor.
  • En el código: Si no desea arrastrar y colocar GameObjects, también puede simplemente agregar un agente de escucha de eventos directamente al script.In code: If you don't want to drag and drop GameObjects around, you can also simply add a event listener directly to your script.
    Este es un ejemplo de cómo lo hicimos en el HitBehaviorDestroyOnSelect script:Here's an example from how we did it in the HitBehaviorDestroyOnSelect script:
/// <summary>
/// Destroys the game object when selected and optionally plays a sound or animation when destroyed.
/// </summary>
[RequireComponent(typeof(EyeTrackingTarget))] // This helps to ensure that the EyeTrackingTarget is attached
public class HitBehaviorDestroyOnSelect : MonoBehaviour
{
    ...
    private EyeTrackingTarget myEyeTrackingTarget = null;

    private void Start()
    {
        myEyeTrackingTarget = this.GetComponent<EyeTrackingTarget>();

        if (myEyeTrackingTarget != null)
        {
            myEyeTrackingTarget.OnSelected.AddListener(TargetSelected);
        }
    }

    ...

    ///
    /// This is called once the EyeTrackingTarget detected a selection.
    ///
    public void TargetSelected()
    {
        // Play some animation
        // Play some audio effect
        // Handle destroying the target appropriately
    }
}

Ejemplo #4: Uso de los rayos de las manos y la entrada de mirada con los ojos juntosExample #4: Use hand rays and eye gaze input together

Los rayos de las manos tienen prioridad sobre el objetivo de la mirada con la cabeza y los ojos.Hand rays take priority over head and eye gaze targeting. Esto significa que, si se habilitan los rayos de mano, en el momento en que las manos se ven, el rayo de la mano actuará como puntero principal.This means, if hand rays are enabled, the moment the hands come into view, the hand ray will act as the primary pointer. Sin embargo, puede haber situaciones en las que quiera usar rayos de mano mientras sigue detectando si un usuario está mirando un determinado holograma.However, there might be situations in which you want to use hand rays while still detecting whether a user is looking at a certain hologram. Fácil.Easy! Básicamente, necesita dos pasos:Essentially you require two steps:

1. Habilitar el rayo de mano: para habilitar el rayo de mano, vaya a Mixed Reality Toolkit -> Input -> Pointers.1. Enable the hand ray: To enable the hand ray, go to Mixed Reality Toolkit -> Input -> Pointers. En EyeTrackingDemo-00-RootScene, donde el kit de herramientas de Mixed Reality se configura una vez para todas las escenas de demostración de seguimiento de los ojos, debería ver EyeTrackingDemoPointerProfile.In the EyeTrackingDemo-00-RootScene where the Mixed Reality Toolkit is configured once for all of the eye tracking demo scenes, you should see the EyeTrackingDemoPointerProfile. Puede crear un nuevo perfil de entrada desde cero o adaptar el actual:You can either create a new Input Profile from scratch or adapt the current eye tracking one:

  • Desde cero: En la pestaña Punteros, seleccione DefaultMixedRealityInputPointerProfile en el menú contextual.From scratch: In the Pointers tab, select the DefaultMixedRealityInputPointerProfile from the context menu. Este es el perfil de puntero predeterminado que ya tiene habilitado el rayo de mano.This is the default pointer profile that already has the hand ray enabled! Para cambiar el cursor predeterminado (un punto blanco opaco), basta con clonar el perfil y crear su propio perfil de puntero personalizado.To change the default cursor (an opaque white dot), simply clone the profile and create your own custom pointer profile. A continuación, reemplace DefaultCursor por EyeGazeCursor en Gaze Cursor Prefab.Then replace DefaultCursor with EyeGazeCursor under Gaze Cursor Prefab.
  • En función del elemento EyeTrackingDemoPointerProfile existente: haga doble clic en EyeTrackingDemoPointerProfile y agregue la siguiente entrada en Opciones de puntero:Based on the existing EyeTrackingDemoPointerProfile: Double-click the EyeTrackingDemoPointerProfile and add the following entry under Pointer Options:
    • Tipo de controlador: "Mano articulada", "Windows Mixed Reality"Controller Type: 'Articulated Hand', 'Windows Mixed Reality'
    • Entrega: CualquierHandedness: Any
    • Prefab de puntero: DefaultControllerPointerPointer Prefab: DefaultControllerPointer

2. Detectar que se busca un holograma: use el script para habilitar la detección de que un holograma se ha visto como se EyeTrackingTarget describió anteriormente.2. Detect that a hologram is looked at: Use the EyeTrackingTarget script to enable detecting that a hologram is looked at as described above. También puede echar un vistazo al script de ejemplo para obtener inspiración, ya que muestra un holograma después de la mirada con los ojos (por ejemplo, un cursor) independientemente de si los rayos de las manos están habilitados FollowEyeGaze o no.You can also take a look at the FollowEyeGaze sample script for inspiration as this is showing a hologram following your eye gaze (e.g., a cursor) whether hand rays are enabled or not.

Ahora, al iniciar las escenas de demostración de seguimiento ocular, debería ver un rayo procedente de las manos.Now, when you start the eye tracking demo scenes, you should see a ray coming from your hands. Por ejemplo, en la demostración de selección de destino de seguimiento de los ojos, el círculo semitransparente sigue con la mirada con los ojos y las gemas responden a si se miran o no, mientras que los botones del menú de la escena superior usan el puntero de entrada principal (las manos) en su lugar.For example, in the eye tracking target selection demo, the semi-transparent circle is still following your eye gaze and the gems respond to whether they are looked at or not, while the top scene menu buttons use the primary input pointer (your hands) instead.


Vuelva a "Eye Tracking in the MixedRealityToolkit" (Seguimiento de los ojos en MixedRealityToolkit).Back to "Eye tracking in the MixedRealityToolkit"