Partager via


Entrée de regard

L’entrée de regard dans les applications de réalité mixte consiste à découvrir ce que vos utilisateurs regardent. Lorsque les caméras de suivi oculaire de votre appareil correspondent aux rayons dans l’espace mondial d’Unreal, les données de ligne de vision de votre utilisateur deviennent disponibles. Le regard peut être utilisé à la fois dans les blueprints et en C++. Il s’agit d’une fonctionnalité de base pour les mécanismes tels que l’interaction d’objet, la recherche de chemin et les contrôles de caméra.

Activation du suivi oculaire

  • Dans Paramètres > du projet HoloLens, activez la fonctionnalité Entrée de regard :

Capture d’écran des fonctionnalités de paramètre de projet HoloLens avec entrée de regard mise en évidence

  • Créer un acteur et l’ajouter à votre scène

Notes

Le suivi oculaire HoloLens dans Unreal n’a qu’un seul rayon de regard pour les deux yeux. Le suivi stéréoscopique, qui nécessite deux rayons, n’est pas pris en charge.

Utilisation du suivi oculaire

Tout d’abord, vérifiez que votre appareil prend en charge le suivi oculaire avec la fonction IsEyeTrackerConnected . Si la fonction retourne true, appelez GetGazeData pour trouver où les yeux de l’utilisateur regardent dans le cadre actuel :

Blueprint de la fonction est connectée au suivi oculaire

Notes

Le point de fixation et la valeur de confiance ne sont pas disponibles sur HoloLens.

Utilisez l’origine et la direction du regard dans une trace de ligne pour savoir exactement où recherchent vos utilisateurs. La valeur du regard est un vecteur, commençant à l’origine du regard et se terminant à l’origine plus la direction du regard multipliée par la distance de trace de ligne :

Blueprint de la fonction Get Gaze Data

Obtention de l’orientation de la tête

Vous pouvez également utiliser la rotation de l’affichage monté en tête (HMD) pour représenter la direction de la tête de l’utilisateur. Vous pouvez obtenir la direction de la tête des utilisateurs sans activer la fonctionnalité Entrée de regard, mais vous n’obtiendrez aucune information de suivi oculaire. Ajoutez une référence au blueprint en tant que contexte mondial pour obtenir les données de sortie correctes :

Notes

L’obtention de données HMD n’est disponible que dans Unreal 4.26 et versions ultérieures.

Blueprint de la fonction Get HMDData

Utilisation de C++

  • Dans le fichier build.cs de votre jeu, ajoutez EyeTracker à la liste PublicDependencyModuleNames :
PublicDependencyModuleNames.AddRange(
    new string[] {
        "Core",
        "CoreUObject",
        "Engine",
        "InputCore",
        "EyeTracker"
});
  • Dans Fichier/Nouvelle classe C++, créez un acteur C++ appelé EyeTracker
    • Une solution Visual Studio ouvre la nouvelle classe EyeTracker. Créez et exécutez pour ouvrir le jeu Unreal avec le nouvel acteur EyeTracker. Recherchez « EyeTracker » dans la fenêtre Place Actors et faites glisser et déposez la classe dans la fenêtre de jeu pour l’ajouter au projet :

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

  • Dans EyeTracker.cpp, ajoutez des inclut pour EyeTrackerFunctionLibrary et 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’obtenir des données de regard. Si le suivi oculaire est pris en charge, recherchez le début et la fin d’un rayon pour une trace de ligne à partir de UEyeTrackerFunctionLibrary::GetGazeData. À partir de là, vous pouvez construire un vecteur de regard et passer son contenu à LineTraceSingleByChannel pour déboguer les résultats d’un rayon :

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 suivant

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. À partir de là, vous pouvez passer au module suivant :

Ou accéder aux API et fonctionnalités de la plateforme Mixed Reality :

Vous pouvez revenir aux points de contrôle de développement Unreal à tout moment.

Voir aussi