본문 바로가기

유니티(Unity)/Hololens2

[Hololens 2] 홀로렌즈 2 - 현재 보고 있는 오브젝트 구하기

홀로렌즈로 어떤 오브젝트를 보고 있을 때 그 오브젝트가 무엇인지에 대한 정보를 얻어야할 필요가 있을 수 있습니다. 이 글에서는 아이 트래킹을 이용해서 현재 보고 있는 오브젝트에 대한 정보를 불러오는 방법을 정리해보겠습니다.

 

[이전 글]

[AR/Hololens 2] 홀로렌즈 2 - GridObjectCollection, DirectionalIndicator, Tap To Place

 

[AR/Hololens 2] 홀로렌즈 2 - GridObjectCollection, DirectionalIndicator, Tap To Place

이번에는 객체의 위치 지정과 객체 추적을 알아보겠습니다. [이전 글] [AR/Hololens 2] 홀로렌즈 2 - Object Manipulator, NearInteractionGrabbable, Build [AR/Hololens 2] 홀로렌즈 2 - Object Manipulator, NearInteractionGrabbable,

ggjjdiary.tistory.com


 

아이 트래킹은 시선 추척을 통해 다양한 입력 상호작용을 할 수 있도록 도와주는 기능입니다.

 

마이크로소프트 공식 문서 - 아이 트래킹

 

Eye Tracking - MRTK 2

Eye Tracking landing page in MRTK

learn.microsoft.com

 

먼저, MixedRealityToolkit Inspector에서 MixedRealityToolkit 컴포넌트를 찾아 Copy & Customize를 눌러 컴포넌트를 수정할 수 있도록 복제해줍니다.

저는 Profile Name을 EyeTracking_MixedRealityToolkitConfigurationProfile으로 지정했습니다.

 

 

 

Input 을 눌러서 기본 프로필을 편집하기 위해 Clone을 만들어줍니다. 저는 이름을 Eyetracking_MixedRealityInputSystemProfile로 지정했습니다.

 

 

Input Data Providers를 눌러 세부 설정을 연 뒤, Add Data Provider를 눌러 Provider를 추가해주고 TypeMicrosoft.MixedReality.Toolkit.XRSDK.WindowsMixedReality - WindowsMixedRealityEyeGazeDataProvider로 지정합니다. Supported Platform(s)Windows Universal로 지정합니다.

 

 

기본적인 시선 추적에 대한 설정은 끝났습니다.

이제 시선 추적을 시뮬레이션 해보겠습니다.

 

MRTK의 Input에서 계속 이어갑니다. Input Data Providers에서 Input Simulation Service를 눌러 탭을 확장합니다.

 

 

설정을 위해 Clone을 눌러 사본을 만들어줍니다. 저는 이름을 Eyetracking_MixedRealityInputSimulationProfile로 지정했습니다.

 

 

아래에서 Eye Gaze Simulation Mode를 찾아 Mouse로 변경해줍니다.

 

 

아래는 눈 응시 커서를 표시하지 않도록 수정하는 과정입니다. 커서 표시가 필요하다면 이 과정은 생략합니다.

더보기

 

이제 MRTK의 Input 탭에서 Pointers로 이동합니다. 마찬가지로 Clone을 눌러서 프로필을 하나 복제합니다. 이름은 Eyetracking_MixedRealityPointerProfile로 지정했습니다.

 

 

Pointer Settings - Gaze Settings - Gaze Cursor Prefab의 Prefab을 EyeGazeCursor로 변경해줍니다.

 

 

 

이번에는 현재 보고 있는 지점을 받아오도록 하겠습니다.

빈 오브젝트를 하나 생성하고 Add Component를 눌러줍니다. 그리고 새 스크립트를 만들어줍니다. 이름은 FollowEye라고 하겠습니다.

 

 

FollowEye를 열어 Update 메소드를 수정합니다.

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Microsoft.MixedReality.Toolkit;

public class FollowEye : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        Debug.Log(CoreServices.InputSystem.EyeGazeProvider.GazeTarget.ToString());
    }
}

 

유니티 씬에 큐브를 배치하고 큐브의 이름이 디버그 콘솔에 출력되는지 테스트합니다.

 

 

아래 영상에서 눈이 움직일 때 마다 작은 큐브가 따라 움직이고, 콘솔 창에는 오브젝트 이름이 갱신되는 모습을 확인할 수 있습니다.