Gaze-indata

Gaze-indata i appar för mixad verklighet handlar om att ta reda på vad användarna tittar på. När ögonspårningskamerorna på enheten matchar strålar i Unreals världsrymd blir användarens siktdata tillgängliga. Gaze kan användas i både skisser och C++, och är en viktig funktion för mekanik som objektinteraktion, vägsökning och kamerakontroller.

Aktivera ögonspårning

  • Aktivera funktionen Gaze Input i Projektinställningar > HoloLens:

Skärmbild av HoloLens-projektinställningsfunktioner med blickindata markerade

  • Skapa en ny aktör och lägg till den i din scen

Anteckning

HoloLens ögonspårning i Unreal har bara en enda blickstråle för båda ögonen. Stereoskopisk spårning, som kräver två strålar, stöds inte.

Använda ögonspårning

Kontrollera först att enheten stöder ögonspårning med funktionen IsEyeTrackerConnected . Om funktionen returnerar true anropar du GetGazeData för att ta reda på var användarens ögon tittar på i den aktuella ramen:

Skiss av funktionen Is Eye Tracking Connected

Anteckning

Fixeringspunkten och konfidensvärdet är inte tillgängliga på HoloLens.

Använd blickens ursprung och riktning i en radspårning för att ta reda på exakt var användarna letar. Blickvärdet är en vektor, som börjar vid blickens ursprung och slutar vid ursprunget plus blickriktningen multiplicerat med linjespårningsavståndet:

Skiss för funktionen Hämta blickdata

Hämta huvudorientering

Du kan också använda rotationen av HMD (Head Mounted Display) för att representera riktningen på användarens huvud. Du kan få användarnas huvudriktning utan att aktivera funktionen Gaze Input, men du får ingen information om ögonspårning. Lägg till en referens till skissen som världskontext för att hämta rätt utdata:

Anteckning

Att hämta HMD-data är endast tillgängligt i Unreal 4.26 och senare.

Skiss av funktionen Get HMDData

Använda C++

  • I ditt spels build.cs-fil lägger du till EyeTracker i listan PublicDependencyModuleNames :
PublicDependencyModuleNames.AddRange(
    new string[] {
        "Core",
        "CoreUObject",
        "Engine",
        "InputCore",
        "EyeTracker"
});
  • I Fil/ Ny C++-klass skapar du en ny C++-aktör med namnet EyeTracker
    • En Visual Studio-lösning öppnar den nya EyeTracker-klassen. Skapa och kör för att öppna Unreal-spelet med den nya EyeTracker-skådespelaren. Sök efter "EyeTracker" i place actors-fönstret och dra och släpp klassen i spelfönstret för att lägga till den i projektet:

Skärmbild av en aktör med platsskådespelarens fönster öppet

  • I EyeTracker.cpp lägger du till inkluderar för EyeTrackerFunctionLibrary och DrawDebugHelpers:
#include "EyeTrackerFunctionLibrary.h"
#include "DrawDebugHelpers.h"

Kontrollera att enheten stöder ögonspårning med UEyeTrackerFunctionLibrary::IsEyeTrackerConnected innan du försöker hämta några blickdata. Om ögonspårning stöds hittar du början och slutet av en stråle för en linjespårning från UEyeTrackerFunctionLibrary::GetGazeData. Därifrån kan du skapa en blickvektor och skicka dess innehåll till LineTraceSingleByChannel för att felsöka eventuella ray hit-resultat:

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ästa kontrollpunkt för utveckling

Om du följer den Unreal-utvecklingsresa som vi har lagt fram är du mitt uppe i att utforska MRTK-kärnbyggnadsblocken. Härifrån kan du fortsätta till nästa byggblock:

Eller gå till Mixed Reality plattformsfunktioner och API:er:

Du kan alltid gå tillbaka till kontrollpunkterna för Unreal-utveckling när som helst.

Se även