Entrada de mirada

La entrada de mirada en las aplicaciones de realidad mixta se trata de averiguar lo que miran los usuarios. Cuando las cámaras de seguimiento de los ojos del dispositivo coinciden con los rayos del espacio mundial de Unreal, los datos de la línea de visión del usuario están disponibles. La mirada se puede usar en planos planos y C++, y es una característica fundamental para mecanismos como la interacción de objetos, la búsqueda de maneras y los controles de cámara.

Habilitación del seguimiento de los ojos

  • En Project Configuración HoloLens, habilite la funcionalidad Entrada de mirada:

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

  • Creación de un actor y adición a la escena

Nota

HoloLens seguimiento de los ojos en Unreal solo tiene un solo rayo de mirada para ambos ojos. No se admite el seguimiento estereocopia, que requiere dos rayos.

Uso del seguimiento ocular

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

Plano técnico de la función Is Eye Tracking Connected

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 buscan los usuarios. El valor de mirada es un vector, empezando por el origen de la mirada y finalizando en el origen más la dirección de mirada multiplicada por la distancia de seguimiento de línea:

Plano técnico de la función Get Gaze Data

Obtener orientación de la cabeza

También puede usar la rotación de head mounted Display (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 le permitirá obtener información de seguimiento de los ojos. Agregue una referencia al plano técnico como contexto mundial para obtener los datos de salida correctos:

Nota

La obtención de datos HMD solo está disponible en Unreal 4.26 y en adelante.

Plano técnico de la función Get HMDData

Usar C++

  • En el archivo build.cs del juego, agregue EyeTracker a la lista PublicDependencyModuleNames:
PublicDependencyModuleNames.AddRange(
    new string[] {
        "Core",
        "CoreUObject",
        "Engine",
        "InputCore",
        "EyeTracker"
});
  • En File/New C++ Class (Archivo/Nueva clase de C++),cree un nuevo actor de C++ llamado EyeTracker.
    • Una Visual Studio de trabajo abrirá la nueva clase EyeTracker. Compile y ejecute para abrir el juego de 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 de actor de lugar abierta

  • En EyeTracker.cpp,agregue includes para EyeTrackerFunctionLibraryy DrawDebugHelpers:
#include "EyeTrackerFunctionLibrary.h"
#include "DrawDebugHelpers.h"

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

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