Blick EingabeGaze Input

Mit der Betrachtung von Blick in Mixed Reality-Apps können Sie herausfinden, was Ihre Benutzer ansehen.Gaze input in mixed reality apps is all about finding out what your users are looking at. Wenn die Augen Verfolgungs Kameras auf Ihrem Gerät mit den Strahlen in Unreal es World Space übereinstimmen, werden die Daten aus der Datenreihe des Benutzers verfügbar.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. Der Blick kann sowohl in Blaupausen als auch C++ verwendet werden und ist ein zentrales Feature für Mechanismen wie Objekt Interaktion, Art der Suche und Kamera Steuerelemente.Gaze can be used in both blueprints and C++, and is a core feature for mechanics like object interaction, way finding, and camera controls.

Aktivieren der Eye-ÜberwachungEnabling eye tracking

  • Aktivieren Sie in den Projekteinstellungen > hololens die Funktion für die über Blicks Eingabe :In Project Settings > HoloLens, enable the Gaze Input capability:

Screenshot der hololens-Projekt Einstellungs Funktionen mit hervorgehobener Blick Eingabe

  • Erstellen Sie einen neuen Actor, und fügen Sie ihn Ihrer Szene hinzu.Create a new actor and add it to your scene

Hinweis

Hololens Eye Tracking in Unreal hat nur einen einzelnen Blick Strahl für beide Augen.HoloLens eye tracking in Unreal only has a single gaze ray for both eyes. Die stereokenverfolgung, die zwei Strahlen erfordert, wird nicht unterstützt.Stereoscopic tracking, which requires two rays, isn't supported.

Verwenden von Eye TrackingUsing eye tracking

Überprüfen Sie zunächst, ob das Gerät die Eye-Nachverfolgung mit der iseyetrackerconnected -Funktion unterstützt.First, check that your device supports eye tracking with the IsEyeTrackerConnected function. Wenn die Funktion "true" zurückgibt, wird getgazedata aufgerufen, um zu ermitteln, wo die Augen des Benutzers im aktuellen Frame suchen:If the function returns true, call GetGazeData to find where the user’s eyes are looking at in the current frame:

Blaupause der verbundenen Funktion für die Augen Verfolgung

Hinweis

Der Fixierungs Punkt und der vertrauensrichtwert sind in hololens nicht verfügbar.The fixation point and the confidence value are not available on HoloLens.

Verwenden Sie den Blick Ursprung und die Richtung in einer Zeilen Ablauf Verfolgung, um genau zu ermitteln, wo Ihre Benutzer suchen.Use the gaze origin and direction in a line trace to find out exactly where your users are looking. Der Wert für den Augenblick ist ein Vektor, beginnend bei der Ursprungs Suche und beim enden an der Ursprungs-und Blick Richtung, multipliziert mit der zeilenlaufverfolgungsentfernung: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:

Blaupause der Daten Funktion "Get-Blick"

Orientierung bei der KopfzeileGetting head orientation

Sie können auch die Drehung des Head-eingebundenen Anzeigers (HMD) verwenden, um die Richtung des Benutzer Kopfes darzustellen.You can also use the rotation of the Head Mounted Display (HMD) to represent the direction of the user’s head. Sie können die Benutzer in die Kopfzeile bringen, ohne die Blick Eingabe Funktion zu aktivieren. Sie erhalten jedoch keine Informationen zu den Augenblick.You can get the users head direction without enabling the Gaze Input capability, but you won't get you any eye tracking information. Fügen Sie einen Verweis auf den Blueprint als Weltkontext hinzu, um die richtigen Ausgabedaten zu erhalten:Add a reference to the blueprint as the world context to get the correct output data:

Hinweis

Das erhalten von HMD-Daten ist nur in Unreal 4,26 und höher verfügbar.Getting HMD Data is only available in Unreal 4.26 and onwards.

Blaupause der Get hmddata-Funktion

Verwenden von C++Using C++

  • Fügen Sie in der Build.cs -Datei Ihres Spiels die Datei " Eyetracker " der publicdependencymodulenames -Liste hinzu:In your game’s build.cs file, add EyeTracker to the PublicDependencyModuleNames list:
PublicDependencyModuleNames.AddRange(
    new string[] {
        "Core",
        "CoreUObject",
        "Engine",
        "InputCore",
        "EyeTracker"
});
  • Erstellen Sie in der Datei/neuen C++-Klasse einen neuen C++ Actor mit dem Namen " Eyetracker ".In File/ New C++ Class, create a new C++ actor called EyeTracker
    • Eine Visual Studio-Projekt Mappe öffnet die neue Klasse "Eyetracker".A Visual Studio solution will open up the new EyeTracker class. Erstellen Sie, und führen Sie aus, um das Unreal-Spiel mit dem neuen Brillen-Actor zu öffnen.Build and run to open the Unreal game with the new EyeTracker actor. Suchen Sie im Fenster " Orts Akteure " nach "Eyetracker", und ziehen Sie die Klasse in das Spielfenster, um Sie dem Projekt hinzuzufügen:Search for “EyeTracker” in the Place Actors window and drag and drop the class into the game window to add it to the project:

Screenshot eines Actors, auf dem das Fenster "Place Actor" geöffnet ist

  • Fügen Sie in " Eyetracker. cpp" für " eyetrackerfunctionlibrary" und " drawdebughelpers" Folgendes hinzu:In EyeTracker.cpp, add includes for EyeTrackerFunctionLibrary, and DrawDebugHelpers:
#include "EyeTrackerFunctionLibrary.h"
#include "DrawDebugHelpers.h"

Überprüfen Sie, ob Ihr Gerät die Eye-Nachverfolgung mit ueyetrackerfunctionlibrary:: iseyetrackerconnected unterstützt, bevor Sie versuchen, die Daten des Blicks zu erhaltenCheck that your device supports eye tracking with UEyeTrackerFunctionLibrary::IsEyeTrackerConnected before trying to get any gaze data. Wenn die Eye-Nachverfolgung unterstützt wird, finden Sie den Anfang und das Ende eines Strahls für eine Zeilen Ablauf Verfolgung von ueyetrackerfunctionlibrary:: getgazedata.If eye tracking is supported, find the start and end of a ray for a line trace from UEyeTrackerFunctionLibrary::GetGazeData. Von dort aus können Sie einen Blick Vektor erstellen und seinen Inhalt an linetracesinglebychannel übergeben, um alle Ray-Treffer Ergebnisse zu Debuggen: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);
            }
        }
    }
}

Nächster EntwicklungsprüfpunktNext Development Checkpoint

Wenn Sie der Unreal-Entwicklungs-Journey folgen, die wir entworfen haben, befinden Sie sich mitten im Kennenlernen der MRTK-Grundbausteine.If you're following the Unreal development journey we've laid out, you're in the midst of exploring the MRTK core building blocks. Von hier aus können Sie mit dem nächsten Baustein fortfahren:From here, you can continue to the next building block:

Oder fahren Sie mit den Funktionen und APIs der Mixed Reality-Plattform fort:Or jump to Mixed Reality platform capabilities and APIs:

Sie können jederzeit zu den Prüfpunkten für die Unreal-Entwicklung zurückkehren.You can always go back to the Unreal development checkpoints at any time.

Siehe auchSee also