Blickindata

Blickindata i appar med mixad verklighet handlar om att ta reda på vad användarna tittar på. När ögonspårningskamerorna på enheten matchar med bilder i Unreals värld blir användarens synområde tillgängliga. Blick kan användas i både skisser och C++, och är en grundläggande funktion för mekanik som objektinteraktion, sätt att hitta och kamerakontroller.

Aktivera ögonspårning

  • I Project Inställningar > HoloLens du funktionen Blickindata:

Skärmbild av HoloLens för projektinställningar med blickindata markerade

  • Skapa en ny skådespelare och lägg till den i din scen

Anteckning

HoloLens ögonspårning i Unreal har bara en enda blicksröta för båda ögonen. Stereoskopispårning, som kräver två ljud, stöds inte.

Använda ögonspårning

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

Skiss för funktionen Is Eye Tracking Connected

Anteckning

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

Använd blickens ursprung och riktning i en linjespå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 på ursprunget plus blickriktningen multiplicerat med linjespårningsavståndet:

Skiss för funktionen Get Gaze Data

Hämta huvudorientering

Du kan också använda rotationen av den huvudmonterade skärmen (HMD) för att representera riktningen på användarens huvud. Du kan få användarnas huvudriktning utan att aktivera funktionen Blickindata, 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

Det går bara att hämta HMD-data i Unreal 4.26 och framåt.

Skiss för funktionen Get HMDData

Använda C++

  • I spelets build.cs-fil lägger du till EyeTracker i listan PublicDependencyModuleNames:
PublicDependencyModuleNames.AddRange(
    new string[] {
        "Core",
        "CoreUObject",
        "Engine",
        "InputCore",
        "EyeTracker"
});
  • I File/ New C++ Class (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 fönstret Place Actors 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 plats aktörsfönstret öppet

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

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

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 skapat är du i färd med att utforska MRTK-kärnbyggstenarna. Härifrån kan du fortsätta till nästa byggblock:

Eller gå Mixed Reality plattformsfunktioner och API:er:

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

Se även