Entrée en regardGaze Input

Les entrées de regard dans les applications de réalité mixte concernent la recherche de ce que vos utilisateurs cherchent.Gaze input in mixed reality apps is all about finding out what your users are looking at. Lorsque les caméras de suivi oculaire sur votre appareil correspondent à des rayons dans l’espace universel, les données de la ligne de vue de votre utilisateur deviennent disponibles.When the eye tracking cameras on your device match up with rays in Unreal's world space, your user's line of sight data becomes available. Le point de regard peut être utilisé à la fois dans les plans et C++, et est une fonctionnalité de base pour l’interaction des objets, les recherches et les contrôles d’appareil photo.Gaze can be used in both blueprints and C++, and is a core feature for mechanics like object interaction, way finding, and camera controls.

Activation du suivi oculaireEnabling eye tracking

  • Dans paramètres du projet > HoloLens, activez la fonctionnalité d’entrée en regard :In Project Settings > HoloLens, enable the Gaze Input capability:

Capture d’écran des fonctionnalités des paramètres du projet HoloLens avec l’entrée en regard en surbrillance

  • Créer un acteur et l’ajouter à votre scèneCreate a new actor and add it to your scene

Notes

Le suivi oculaire HoloLens en non réel a un seul rayon de regard pour les deux yeux.HoloLens eye tracking in Unreal only has a single gaze ray for both eyes. Le suivi STEREOSCOPIQUE, qui nécessite deux rayons, n’est pas pris en charge.Stereoscopic tracking, which requires two rays, isn't supported.

Utilisation du suivi oculaireUsing eye tracking

Tout d’abord, vérifiez que votre appareil prend en charge le suivi oculaire avec la fonction IsEyeTrackerConnected .First, check that your device supports eye tracking with the IsEyeTrackerConnected function. Si la fonction retourne la valeur true, appelez GetGazeData pour Rechercher l’endroit où les yeux de l’utilisateur regardent dans le frame actuel :If the function returns true, call GetGazeData to find where the user’s eyes are looking at in the current frame:

Le plan de la fonction est connecté au suivi oculaire

Notes

Le point de fixation et la valeur de confiance ne sont pas disponibles sur HoloLens.The fixation point and the confidence value are not available on HoloLens.

Utilisez l’origine du regard et la direction dans un suivi de ligne pour déterminer exactement où vos utilisateurs cherchent.Use the gaze origin and direction in a line trace to find out exactly where your users are looking. La valeur de point d’interligne est un vecteur, commençant à l’origine du point de regard et se terminant à l’origine plus la direction du point d’arrêt multipliée par la distance de trace de la ligne :The gaze value is a vector, starting at the gaze origin and ending at the origin plus the gaze direction multiplied by the line trace distance:

Plan de la fonction d’extraction de données de regard

Obtention de l’orientation des têtesGetting head orientation

Vous pouvez également utiliser la rotation de l’affichage monté en tête (HMD) pour représenter la direction de l’en-tête de l’utilisateur.You can also use the rotation of the Head Mounted Display (HMD) to represent the direction of the user’s head. Vous pouvez accéder à la direction de la tête des utilisateurs sans activer la fonction d’entrée en regard, mais vous ne pourrez pas accéder aux informations de suivi oculaire.You can get the users head direction without enabling the Gaze Input capability, but you won't get you any eye tracking information. Ajoutez une référence au plan comme contexte universel pour obtenir les données de sortie correctes :Add a reference to the blueprint as the world context to get the correct output data:

Notes

L’obtention de données HMD n’est disponible que dans les versions 4,26 et ultérieures.Getting HMD Data is only available in Unreal 4.26 and onwards.

Plan de la fonction d’extraction de HMDData

Utilisation de C++Using C++

  • Dans le fichier Build.cs de votre jeu, ajoutez EyeTracker à la liste PublicDependencyModuleNames :In your game’s build.cs file, add EyeTracker to the PublicDependencyModuleNames list:
PublicDependencyModuleNames.AddRange(
    new string[] {
        "Core",
        "CoreUObject",
        "Engine",
        "InputCore",
        "EyeTracker"
});
  • Dans fichier/nouvelle classe c++, créez un acteur C++ appelé EyeTrackerIn File/ New C++ Class, create a new C++ actor called EyeTracker
    • Une solution Visual Studio ouvre la nouvelle classe EyeTracker.A Visual Studio solution will open up the new EyeTracker class. Générez et exécutez pour ouvrir le jeu inréel avec le nouvel acteur EyeTracker.Build and run to open the Unreal game with the new EyeTracker actor. Recherchez « EyeTracker » dans la fenêtre Placer les acteurs , puis faites glisser et déposez la classe dans la fenêtre de jeu pour l’ajouter au projet :Search for “EyeTracker” in the Place Actors window and drag and drop the class into the game window to add it to the project:

Capture d’écran d’un acteur avec la fenêtre placer l’acteur ouverte

  • Dans EyeTracker. cpp, ajoutez includes pour EyeTrackerFunctionLibrary et DrawDebugHelpers:In EyeTracker.cpp, add includes for EyeTrackerFunctionLibrary, and DrawDebugHelpers:
#include "EyeTrackerFunctionLibrary.h"
#include "DrawDebugHelpers.h"

Vérifiez que votre appareil prend en charge le suivi oculaire avec UEyeTrackerFunctionLibrary :: IsEyeTrackerConnected avant d’essayer d’accéder aux données de regard.Check that your device supports eye tracking with UEyeTrackerFunctionLibrary::IsEyeTrackerConnected before trying to get any gaze data. Si le suivi oculaire est pris en charge, recherchez le début et la fin d’un rayon pour une trace ligne à partir de UEyeTrackerFunctionLibrary :: GetGazeData.If eye tracking is supported, find the start and end of a ray for a line trace from UEyeTrackerFunctionLibrary::GetGazeData. À partir de là, vous pouvez construire un vecteur de pointage et transmettre son contenu à LineTraceSingleByChannel pour déboguer les résultats d’accès aux rayons :From there, you can construct a gaze vector and pass its contents to LineTraceSingleByChannel to debug any ray hit results:

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);
            }
        }
    }
}

Point de contrôle de développement suivantNext Development Checkpoint

Si vous suivez le parcours de développement Unreal que nous avons mis en place, vous êtes en train d’explorer les modules de base du MRTK.If you're following the Unreal development journey we've laid out, you're in the midst of exploring the MRTK core building blocks. À partir de là, vous pouvez passer au module suivant :From here, you can continue to the next building block:

Ou accéder aux API et fonctionnalités de la plateforme Mixed Reality :Or jump to Mixed Reality platform capabilities and APIs:

Vous pouvez revenir aux points de contrôle de développement Unreal à tout moment.You can always go back to the Unreal development checkpoints at any time.

Voir aussiSee also