응시 입력
혼합 현실 앱의 응시 입력은 사용자가 보고 있는 내용을 찾는 것입니다. 디바이스의 시선 추적 카메라가 Unreal의 월드 공간에서 광선과 일치하면 사용자의 시야 데이터를 사용할 수 있게 됩니다. 응시는 청사진과 C++에서 모두 사용할 수 있으며 개체 상호 작용, 방법 찾기 및 카메라 컨트롤과 같은 메커니즘의 핵심 기능입니다.
시선 추적 사용
- 프로젝트 설정 > HoloLens에서 응시 입력 기능을 사용하도록 설정합니다.
- 새 행위자를 만들고 장면에 추가합니다.
참고
Unreal의 HoloLens 시선 추적에는 두 눈 모두에 대한 단일 응시 광선만 있습니다. 두 개의 광선이 필요한 입체 추적은 지원되지 않습니다.
시선 추적 사용
먼저 디바이스가 IsEyeTrackerConnected 함수를 사용하여 시선 추적을 지원하는지 확인합니다. 함수가 true를 반환하는 경우 GetGazeData 를 호출하여 사용자의 눈이 현재 프레임에서 보고 있는 위치를 찾습니다.
참고
HoloLens에서는 고정 지점 및 신뢰도 값을 사용할 수 없습니다.
선 추적에서 응시 원점 및 방향을 사용하여 사용자가 찾고 있는 위치를 정확히 확인할 수 있습니다. 응시 값은 응시 원점에서 시작하여 원점에서 끝나는 벡터와 선 추적 거리를 곱한 응시 방향입니다.
머리 방향 가져오기
HMD(헤드 탑재 디스플레이)의 회전을 사용하여 사용자의 머리 방향을 나타낼 수도 있습니다. 응시 입력 기능을 사용하도록 설정하지 않고도 사용자의 머리 방향을 가져올 수 있지만 시선 추적 정보는 가져올 수 없습니다. 청사진에 대한 참조를 월드 컨텍스트로 추가하여 올바른 출력 데이터를 가져옵니다.
참고
HMD 데이터 가져오기는 Unreal 4.26 이상에서만 사용할 수 있습니다.
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에서 EyeTrackerFunctionLibrary 및 DrawDebugHelpers에 대한 포함을 추가합니다.
#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 개발 검사점으로 돌아갈 수 있습니다.