Compartir a través de


Entrada de mirada

La entrada de mirada en las aplicaciones de realidad mixta consiste en averiguar lo que ven los usuarios. Cuando las cámaras de seguimiento ocular del dispositivo coinciden con los rayos en el espacio mundial de Unreal, los datos de línea de visión del usuario estarán disponibles. La mirada se puede usar tanto en planos técnicos como en C++, y es una característica básica para la mecánica, como la interacción de objetos, la búsqueda de formas y los controles de cámara.

Habilitación del seguimiento ocular

  • En Configuración del > proyecto HoloLens, habilite la funcionalidad Entrada de mirada :

Captura de pantalla de las funcionalidades de configuración del proyecto de HoloLens con la entrada de mirada resaltada

  • Cree un actor y agréguelo a la escena.

Nota:

El seguimiento ocular de HoloLens en Unreal solo tiene un solo rayo de mirada para ambos ojos. No se admite el seguimiento estereoscópico, que requiere dos rayos.

Uso del seguimiento ocular

En primer lugar, compruebe que el dispositivo admite el seguimiento ocular con la función IsEyeTrackerConnected . Si la función devuelve true, llame a GetGazeData para buscar dónde están mirando los ojos del usuario en el marco actual:

Plano técnico de la función Conectada is Eye Tracking

Nota:

El punto de corrección y el valor de confianza no están disponibles en HoloLens.

Use el origen y la dirección de la mirada en un seguimiento de línea para averiguar exactamente dónde están buscando los usuarios. El valor de la mirada es un vector, empezando por el origen de la mirada y terminando en el origen más la dirección de la mirada multiplicada por la distancia de seguimiento de línea:

Plano técnico de la función Obtener datos de mirada

Obtención de la orientación de la cabeza

También puede usar la rotación de la pantalla montada en la cabeza (HMD) para representar la dirección de la cabeza del usuario. Puede obtener la dirección principal de los usuarios sin habilitar la funcionalidad Entrada de mirada, pero no obtendrá información de seguimiento ocular. Agregue una referencia al plano técnico como contexto mundial para obtener los datos de salida correctos:

Nota:

Obtener datos HMD solo está disponible en Unreal 4.26 y versiones posteriores.

Plano técnico de la función Get HMDData

Usar C++

  • En el archivo build.cs del juego, agrega EyeTracker a la lista PublicDependencyModuleNames :
PublicDependencyModuleNames.AddRange(
    new string[] {
        "Core",
        "CoreUObject",
        "Engine",
        "InputCore",
        "EyeTracker"
});
  • En Archivo/Nueva clase de C++, cree un nuevo actor de C++ denominado EyeTracker.
    • Una solución de Visual Studio abrirá la nueva clase EyeTracker. Compile y ejecute para abrir el juego Unreal con el nuevo actor EyeTracker. Busque "EyeTracker" en la ventana Colocar actores y arrastre y coloque la clase en la ventana del juego para agregarla al proyecto:

Captura de pantalla de un actor con la ventana colocar actor abierta

  • En EyeTracker.cpp, agregue incluye para EyeTrackerFunctionLibrary y DrawDebugHelpers:
#include "EyeTrackerFunctionLibrary.h"
#include "DrawDebugHelpers.h"

Compruebe que el dispositivo admite el seguimiento ocular con UEyeTrackerFunctionLibrary::IsEyeTrackerConnected antes de intentar obtener datos de mirada. Si se admite el seguimiento ocular, busque el inicio y el final de un rayo para un seguimiento de línea de UEyeTrackerFunctionLibrary::GetGazeData. Desde allí, puede construir un vector de mirada y pasar su contenido a LineTraceSingleByChannel para depurar los resultados de posicionamiento de rayos:

void AEyeTracker::Tick(float DeltaTime)
{
    Super::Tick(DeltaTime);

    if(UEyeTrackerFunctionLibrary::IsEyeTrackerConnected())
    {
        FEyeTrackerGazeData GazeData;
        if(UEyeTrackerFunctionLibrary::GetGazeData(GazeData))
        {
            FVector Start = GazeData.GazeOrigin;
            FVector End = GazeData.GazeOrigin + GazeData.GazeDirection * 100;

            FHitResult Hit Result;
            if (GWorld->LineTraceSingleByChannel(HitResult, Start, End, ECollisionChannel::ECC_Visiblity))
            {
                DrawDebugCoordinateSystem(GWorld, HitResult.Location, FQuat::Identity.Rotator(), 10);
            }
        }
    }
}

Siguiente punto de control de desarrollo

Si sigue el recorrido de desarrollo de Unreal que hemos diseñado, significa que ya se encuentra en proceso de explorar los bloques de compilación principales de MRTK. Desde aquí, puede continuar con el siguiente bloque de compilación:

O bien puede saltar a las funcionalidades y las API de la plataforma de realidad mixta:

Puede volver a los puntos de control de desarrollo de Unreal en cualquier momento.

Consulta también