눈 보정 - MRTK2
개요
시선 추적이 앱 환경의 기본적인 부분인 경우 사용자의 눈 보정이 유효한지 확인할 수 있습니다. 유효하지 않은 기본 이유는 사용자가 장치를 착용할 때 시선 추적 보정을 건너뛰도록 선택하기 때문입니다.
이 페이지에서는 다음을 다룹니다.
- 사용자가 눈 보정을 받는지 감지하는 방법을 설명합니다.
- 사용자에게 눈 보정을 진행하도록 지시하는 사용자 알림을 트리거하는 방법에 대한 샘플을 제공합니다.
- 눈 보정이 유효해지면 자동으로 알림 해제
- 사용자가 보정 없이 계속하도록 선택하는 경우 수동으로 알림 해제
눈 보정 상태를 감지하는 방법
MRTK의 시선 추적 구성은 인터페이스를 IMixedRealityEyeGazeProvider
통해 구성됩니다.
CoreServices.InputSystem.EyeGazeProvider를 사용하면 런타임 시 도구 키트에 등록된 기본 응시 공급자 구현이 제공됩니다. IMixedRealityEyeGazeProvider.IsEyeGazeValid
bool?
는 아직 눈 추적기에서 정보를 사용할 수 없는 경우 null인 을 반환합니다.
데이터가 수신되면 true 또는 false를 반환하여 사용자의 시선 추적 보정이 유효하거나 유효하지 않음을 나타냅니다.
샘플 눈 보정 알림 - 단계별
MRTK 시선 추적 예제 패키지 열기(Assets/MRTK/Examples/Demos/EyeTracking)
EyeTrackingDemo-00-RootScene.unity 장면 로드
EyeCalibrationChecker를 확인하세요.
이 장면에서는 현재 사용자가 EyeCalibrationChecker 게임 개체에서 보정되었는지 여부를 감지하기 위한 샘플이 이미 있습니다. 단순히 몇 가지 텍스트 메시를 부모로 지정하고 알림을 안팎으로 혼합하기 위한 몇 가지 추가 트리거가 있습니다. 여기에는 정품 인증 시 크기와 불투명도를 서서히 늘리는 것이 포함됩니다. 알림이 해제되면 서서히 크기가 줄어들고 페이드 아웃됩니다.
EyeCalibrationChecker 게임 개체에 연결된 은 두 개의 Unity 이벤트를 노출하는 EyeCalibrationChecker 스크립트입니다.
OnEyeCalibrationDetected()
OnNoEyeCalibrationDetected()
이러한 이벤트는 보정 상태 변경되는 경우에만 트리거됩니다. 따라서 사용자가 알림을 해제하도록 선택하면 알림이 다시 표시되지 않습니다.
- 앱이 다시 시작됩니다.
- 유효한 사용자가 검색된 다음, 비보정되지 않은 새 사용자가 디바이스를 켜 놓았습니다.
애니메이션 및 이벤트가 올바르게 트리거되는지 여부를 테스트하기 위해 EyeCalibrationChecker 스크립트에는 플래그가
bool editorTestUserIsCalibrated
있습니다. 예를 들어 Unity 편집기에서 실행하는 경우 다음을 테스트할 수 있습니다.- 보정 상태 true에서 false로 변경되면 알림이 자동으로 팝업되는지 여부
- 상태 false에서 true로 변경되면 알림을 자동으로 해제할지 여부입니다.
private bool? prevCalibrationStatus = null;
...
void Update()
{
// Get the latest calibration state from the EyeGazeProvider
bool? calibrationStatus = CoreServices.InputSystem?.EyeGazeProvider?.IsEyeCalibrationValid;
...
if (calibrationStatus != null)
{
if (prevCalibrationStatus != calibrationStatus)
{
if (calibrationStatus == false)
{
OnNoEyeCalibrationDetected.Invoke();
}
else
{
OnEyeCalibrationDetected.Invoke();
}
prevCalibrationStatus = calibrationStatus;
}
}