Condividi tramite


Input sguardo fisso

L'input dello sguardo fisso nelle app di realtà mista è tutto ciò che gli utenti stanno esaminando. Quando le telecamere di tracciamento oculare del dispositivo corrispondono ai raggi nello spazio globale di Unreal, i dati della linea di vista dell'utente diventano disponibili. Lo sguardo fisso può essere usato sia nei progetti che in C++, ed è una funzionalità di base per meccanismi come l'interazione con oggetti, la ricerca e i controlli della fotocamera.

Abilitazione del tracciamento oculare

  • In Impostazioni > progetto HoloLens abilitare la funzionalità Di input sguardo fisso :

Screenshot delle funzionalità dell'impostazione del progetto HoloLens con l'input sguardo fisso evidenziato

  • Creare un nuovo attore e aggiungerlo alla scena

Nota

Il tracciamento oculare di HoloLens in Unreal ha un solo raggio sguardo fisso per entrambi gli occhi. Il tracciamento stereoscopico, che richiede due raggi, non è supportato.

Uso del tracciamento oculare

Verificare innanzitutto che il dispositivo supporti il tracciamento oculare con la funzione IsEyeTrackerConnected . Se la funzione restituisce true, chiamare GetGazeData per trovare dove si trovano gli occhi dell'utente nel frame corrente:

Progetto della funzione Is Eye Tracking Connected

Nota

Il punto di correzione e il valore di attendibilità non sono disponibili in HoloLens.

Usare l'origine e la direzione dello sguardo fisso in una traccia di linea per scoprire esattamente dove stanno cercando gli utenti. Il valore dello sguardo fisso è un vettore, a partire dall'origine dello sguardo fisso e termina con l'origine più la direzione dello sguardo fisso moltiplicata per la distanza di traccia della linea:

Progetto della funzione Recupera dati sguardo fisso

Ottenere l'orientamento della testa

È anche possibile usare la rotazione del display montato head (HMD) per rappresentare la direzione della testa dell'utente. È possibile ottenere la direzione di direzione degli utenti senza abilitare la funzionalità Di input sguardo fisso, ma non si otterranno informazioni sul tracciamento oculare. Aggiungere un riferimento al progetto come contesto globale per ottenere i dati di output corretti:

Nota

Il recupero dei dati HMD è disponibile solo in Unreal 4.26 e versioni successive.

Progetto della funzione Get HMDData

Utilizzo di C++

  • Nel file build.cs del gioco aggiungere EyeTracker all'elenco PublicDependencyModuleNames :
PublicDependencyModuleNames.AddRange(
    new string[] {
        "Core",
        "CoreUObject",
        "Engine",
        "InputCore",
        "EyeTracker"
});
  • In File/ Nuova classe C++ creare un nuovo attore C++ denominato EyeTracker
    • Una soluzione di Visual Studio aprirà la nuova classe EyeTracker. Crea ed esegui per aprire il gioco Unreal con il nuovo attore EyeTracker. Cercare "EyeTracker" nella finestra Place Actors e trascinare la classe nella finestra del gioco per aggiungerla al progetto:

Screenshot di un attore con la finestra dell'attore di posizione aperta

  • In EyeTracker.cpp aggiungere include per EyeTrackerFunctionLibrary e DrawDebugHelpers:
#include "EyeTrackerFunctionLibrary.h"
#include "DrawDebugHelpers.h"

Verificare che il dispositivo supporti il tracciamento oculare con UEyeTrackerFunctionLibrary::IsEyeTrackerConnected prima di provare a ottenere i dati dello sguardo fisso. Se il tracciamento oculare è supportato, trovare l'inizio e la fine di un raggio per una traccia di linea da UEyeTrackerFunctionLibrary::GetGazeData. Da qui è possibile costruire un vettore di sguardo fisso e passarne il contenuto a LineTraceSingleByChannel per eseguire il debug di qualsiasi risultato 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);
            }
        }
    }
}

Successivo checkpoint di sviluppo

Se si segue il percorso delineato per lo sviluppo con Unreal, tenere presente che si stanno esplorando i blocchi predefiniti fondamentali di MRTK. Da qui è possibile passare al blocco predefinito successivo:

In alternativa, passare alle API e alle funzionalità della piattaforma di realtà mista:

È sempre possibile tornare ai checkpoint per lo sviluppo con Unreal in qualsiasi momento.

Vedere anche