응시 입력

혼합 현실 앱의 응시 입력은 사용자가 보고 있는 내용을 찾는 것입니다. 디바이스의 시선 추적 카메라가 Unreal의 월드 공간에서 광선과 일치하면 사용자의 시야 데이터를 사용할 수 있게 됩니다. 응시는 청사진과 C++에서 모두 사용할 수 있으며 개체 상호 작용, 방법 찾기 및 카메라 컨트롤과 같은 메커니즘의 핵심 기능입니다.

시선 추적 사용

  • 프로젝트 설정 > HoloLens에서 응시 입력 기능을 사용하도록 설정합니다.

응시 입력이 강조 표시된 HoloLens 프로젝트 설정 기능의 스크린샷

  • 새 행위자를 만들고 장면에 추가합니다.

참고

Unreal의 HoloLens 시선 추적에는 두 눈 모두에 대한 단일 응시 광선만 있습니다. 두 개의 광선이 필요한 입체 추적은 지원되지 않습니다.

시선 추적 사용

먼저 디바이스가 IsEyeTrackerConnected 함수를 사용하여 시선 추적을 지원하는지 확인합니다. 함수가 true를 반환하는 경우 GetGazeData 를 호출하여 사용자의 눈이 현재 프레임에서 보고 있는 위치를 찾습니다.

Is Eye Tracking Connected 함수의 청사진

참고

HoloLens에서는 고정 지점 및 신뢰도 값을 사용할 수 없습니다.

선 추적에서 응시 원점 및 방향을 사용하여 사용자가 찾고 있는 위치를 정확히 확인할 수 있습니다. 응시 값은 응시 원점에서 시작하여 원점에서 끝나는 벡터와 선 추적 거리를 곱한 응시 방향입니다.

응시 데이터 가져오기 함수의 청사진

머리 방향 가져오기

HMD(헤드 탑재 디스플레이)의 회전을 사용하여 사용자의 머리 방향을 나타낼 수도 있습니다. 응시 입력 기능을 사용하도록 설정하지 않고도 사용자의 머리 방향을 가져올 수 있지만 시선 추적 정보는 가져올 수 없습니다. 청사진에 대한 참조를 월드 컨텍스트로 추가하여 올바른 출력 데이터를 가져옵니다.

참고

HMD 데이터 가져오기는 Unreal 4.26 이상에서만 사용할 수 있습니다.

Get HMDData 함수의 청사진

C++ 사용

  • 게임의 build.cs 파일에서 PublicDependencyModuleNames 목록에 EyeTracker를 추가합니다.
PublicDependencyModuleNames.AddRange(
    new string[] {
        "Core",
        "CoreUObject",
        "Engine",
        "InputCore",
        "EyeTracker"
});
  • 파일/새 C++ 클래스에서 EyeTracker라는 새 C++ 행위자를 만듭니다.
    • Visual Studio 솔루션은 새 EyeTracker 클래스를 엽니다. 빌드하고 실행하여 새 EyeTracker 행위자와 함께 Unreal 게임을 엽니다. 행위자 배치 창에서 "EyeTracker"를 검색하고 클래스를 게임 창으로 끌어서 놓아 프로젝트에 추가합니다.

행위자 창이 열려 있는 행위자의 스크린샷

  • EyeTracker.cpp에서 EyeTrackerFunctionLibraryDrawDebugHelpers에 대한 포함을 추가합니다.
#include "EyeTrackerFunctionLibrary.h"
#include "DrawDebugHelpers.h"

응시 데이터를 가져오기 전에 디바이스가 UEyeTrackerFunctionLibrary::IsEyeTrackerConnected 를 사용하여 시선 추적을 지원하는지 확인합니다. 시선 추적이 지원되는 경우 UEyeTrackerFunctionLibrary::GetGazeData에서 선 추적에 대한 광선의 시작과 끝을 찾습니다. 여기에서 응시 벡터를 생성하고 해당 내용을 LineTraceSingleByChannel에 전달하여 광선 적중 결과를 디버그할 수 있습니다.

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);
            }
        }
    }
}

다음 개발 검사점

앞에서 설명한 Unreal 개발 과정을 따르고 있다면 현재 MRTK 핵심 구성 요소를 살펴보는 중입니다. 여기에서 다음 구성 요소로 진행할 수 있습니다.

또는 Mixed Reality 플랫폼 기능 및 API로 이동합니다.

언제든지 Unreal 개발 검사점으로 돌아갈 수 있습니다.

참고 항목