HoloLens(1세대) 입력 210: 응시

중요

Mixed Reality Academy 자습서는 HoloLens(1세대), Unity 2017 및 Mixed Reality 몰입형 헤드셋을 염두에 두고 설계되었습니다. 따라서 이러한 디바이스 개발에 대한 지침을 계속 찾고 있는 개발자를 위해 이러한 자습서를 그대로 두는 것이 중요합니다. 이러한 자습서는 HoloLens 2 사용되는 최신 도구 집합 또는 상호 작용으로 업데이트되지 않으며 최신 버전의 Unity와 호환되지 않을 수 있습니다. 대신 지원되는 디바이스에서 계속 작동하도록 유지 관리됩니다. HoloLens 2에 대한 새로운 자습서 시리즈가 게시되었습니다.

응시 는 첫 번째 입력 형식이며 사용자의 의도와 인식을 표시합니다. MR Input 210(프로젝트 Explorer이라고도 하는)은 Windows Mixed Reality 응시 관련 개념을 자세히 설명합니다. 앱이 사용자의 시선에 대해 알고 있는 내용을 최대한 활용하여 커서 및 홀로그램에 컨텍스트 인식을 추가할 예정입니다.

우리는 당신이 응시 개념을 배울 수 있도록 여기에 친절한 우주 비행사가 있습니다. MR Basics 101에서는 시선을 따라가는 간단한 커서가 있었습니다. 현재는 간단한 커서를 넘어 한 걸음 더 나아가고 있습니다.

  • 커서와 홀로그램 응시를 인식합니다. 둘 다 사용자가 찾고 있는 위치 또는 사용자가 보지 않는 위치에 따라 변경됩니다. 이렇게 하면 컨텍스트를 인식할 수 있습니다.
  • 사용자에게 대상에 대한 더 많은 컨텍스트를 제공하기 위해 커서 및 홀로그램에 피드백을 추가합니다. 이 피드백은 오디오 및 시각적 개체일 수 있습니다.
  • 사용자가 더 작은 대상에 도달할 수 있도록 타겟팅 기술을 보여 줍니다.
  • 방향 표시기를 사용하여 홀로그램에 사용자의 주의를 끄는 방법을 보여 드리겠습니다.
  • 우리는 그녀가 당신의 세계에서 이동으로 사용자와 홀로그램을 취할 수있는 기술을 가르 칠 것이다.

중요

아래 각 챕터에 포함된 비디오는 이전 버전의 Unity 및 Mixed Reality 도구 키트를 사용하여 녹화되었습니다. 단계별 지침은 정확하고 최신이지만 오래된 해당 비디오에서 스크립트와 시각적 개체를 볼 수 있습니다. 비디오는 후손을 위해 포함되어 있으며 다루는 개념이 여전히 적용되므로 계속 포함됩니다.

디바이스 지원

과정 HoloLens 몰입형 헤드셋
MR 입력 210: 응시 ✔️ ✔️

시작하기 전에

필수 구성 요소

프로젝트 파일

  • 프로젝트에 필요한 파일을 다운로드합니다. Unity 2017.2 이상이 필요합니다.
  • 바탕 화면 또는 기타 쉽게 연결할 수 있는 위치에 파일을 보관 해제합니다.

참고

다운로드하기 전에 소스 코드를 살펴보려면 GitHub에서 사용할 수 있습니다.

Errata 및 Notes

  • Visual Studio에서 코드의 중단점을 적중하려면 도구->옵션->디버깅에서 "내 코드만"을 사용하지 않도록 설정(선택 취소)해야 합니다.

1장 - Unity 설치

목표

  • HoloLens 개발을 위해 Unity를 최적화합니다.
  • 자산을 가져오고 장면을 설정합니다.
  • HoloLens에서 우주 비행사를 봅니다.

지침

  1. Unity를 시작합니다.
  2. 새 프로젝트를 선택합니다.
  3. 프로젝트 이름을 ModelExplorer로 지정합니다.
  4. 이전에 보관하지 않은 Gaze 폴더로 위치를 입력합니다.
  5. 프로젝트가 3D로 설정되어 있는지 확인합니다.
  6. 프로젝트 만들기를 클릭합니다.

HoloLens에 대한 Unity 설정

내보내려는 앱이 2D 보기 대신 몰입형 보기를 만들어야 한다는 것을 Unity에 알려야 합니다. 이렇게 하려면 HoloLens를 가상 현실 디바이스로 추가합니다.

  1. 프로젝트 설정 > 플레이어 편집 > 으로 이동합니다.
  2. 플레이어 설정에 대한 검사기 패널 에서 Windows 스토어 아이콘을 선택합니다.
  3. XR 설정 그룹을 확장합니다.
  4. 렌더링 섹션에서 가상 현실 지원 확인란을 선택하여 새 가상 현실 SDK 목록을 추가합니다.
  5. 목록에 Windows Mixed Reality가 나타나는지 확인합니다. 그렇지 않은 경우 목록 맨 아래에 있는 단추를 선택하고 +Windows Holographic을 선택합니다.

다음으로 스크립팅 백 엔드를 .NET으로 설정해야 합니다.

  1. 프로젝트 설정 > 플레이어 편집 > 으로 이동합니다(이전 단계에서 이 작업을 수행할 수 있음).
  2. 플레이어 설정에 대한 검사기 패널 에서 Windows 스토어 아이콘을 선택합니다.
  3. 기타 설정 구성 섹션에서 스크립팅 백 엔드.NET으로 설정되어 있는지 확인합니다.

마지막으로, HoloLens에서 빠른 성능을 달성하기 위해 품질 설정을 업데이트합니다.

  1. 프로젝트 설정 > 품질 편집 > 으로 이동합니다.
  2. Windows 스토어 아이콘 아래의 기본 행에서 아래쪽 화살표를 클릭합니다.
  3. Windows 스토어 앱에 대해 매우 낮음을 선택합니다.

프로젝트 자산 가져오기

  1. 프로젝트 패널에서 Assets 폴더를 마우스 오른쪽 단추 클릭합니다.
  2. 패키지 사용자 지정 패키지 > 가져오기를 클릭합니다.
  3. 다운로드한 프로젝트 파일로 이동하고 ModelExplorer.unitypackage를 클릭합니다.
  4. 열기를 클릭합니다.
  5. 패키지가 로드된 후 가져오기 단추를 클릭합니다.

장면 설정

  1. 계층 구조에서 기본 카메라를 삭제합니다.
  2. HoloToolkit 폴더에서 입력 폴더를 연 다음 Prefabs 폴더를 엽니다.
  3. Prefabs 폴더의 MixedRealityCameraParent 프리팹을 계층 구조로 끌어서 놓습니다.
  4. 계층 구조에서 방향 표시등 을 마우스 오른쪽 단추로 클릭하고 삭제를 선택합니다.
  5. Holograms 폴더에서 다음 자산을 계층 구조의 루트로 끌어서 놓습니다.
    • AstroMan
    • 조명
    • SpaceAudioSource
    • SpaceBackground
  6. 재생 모드▶를 시작하여 우주 비행사를 봅니다.
  7. 재생 모드▶를 다시 클릭하여 중지합니다.
  8. Holograms 폴더에서 Fitbox 자산을 찾아 계층 구조의 루트로 끕니다.
  9. 계층 구조 패널에서 Fitbox를 선택합니다.
  10. AstroMan 컬렉션을 계층 구조에서 검사기 패널의 Fitbox의 Hologram Collection 속성으로 끕니다.

프로젝트 저장

  1. 새 장면 > 파일 저장 장면을 다른 이름으로 저장합니다.
  2. 새 폴더를 클릭하고 폴더 이름을 Scenes로 지정합니다.
  3. 파일 이름을 "ModelExplorer"로 지정하고 Scenes 폴더에 저장합니다.

프로젝트 빌드

  1. Unity에서 파일 > 빌드 설정을 선택합니다.
  2. 열린 장면 추가를 클릭하여 장면을 추가합니다.
  3. 플랫폼 목록에서 유니버설 Windows 플랫폼 선택하고 플랫폼 전환을 클릭합니다.
  4. HoloLens용으로 특별히 개발하는 경우 대상 디바이스HoloLens로 설정합니다. 그렇지 않으면 모든 디바이스에 그대로 둡니다.
  5. 빌드 유형D3D로 설정되고 SDK최신 설치됨(SDK 16299 이상이어야 합니다)으로 설정되어 있는지 확인합니다.
  6. 빌드를 클릭한 다음
  7. "App"이라는 새 폴더 를 만듭니다.
  8. 폴더를 한 번 클릭합니다.
  9. 폴더 선택을 누릅니다.

Unity가 완료되면 파일 탐색기 창이 나타납니다.

  1. App 폴더를 엽니다.
  2. ModelExplorer Visual Studio Solution을 엽니다.

HoloLens에 배포하는 경우:

  1. Visual Studio에서 위쪽 도구 모음을 사용하여 대상을 디버그에서 릴리스 로, ARM에서 x86으로 변경합니다.
  2. 로컬 컴퓨터 단추 옆에 있는 드롭다운 화살표를 클릭하고 원격 머신을 선택합니다.
  3. HoloLens 디바이스 IP 주소를 입력하고 인증 모드를 유니버설(암호화되지 않은 프로토콜)로 설정합니다. 선택을 클릭합니다. 디바이스 IP 주소를 모르는 경우 설정 > 네트워크 & 인터넷 > 고급 옵션을 참조하세요.
  4. 위쪽 메뉴 모음에서 디버그 -> 디버깅하지 않고 시작을 클릭하거나 Ctrl + F5를 누릅니다. 디바이스에 처음 배포하는 경우 Visual Studio와 페어링해야 합니다.
  5. 앱이 배포되면 선택 제스처Fitbox를 해제합니다.

몰입형 헤드셋에 배포하는 경우:

  1. Visual Studio의 위쪽 도구 모음을 사용하여 대상을 디버그에서 릴리스 로, ARM에서 x64로 변경합니다.
  2. 배포 대상이 로컬 컴퓨터로 설정되어 있는지 확인합니다.
  3. 위쪽 메뉴 모음에서 디버그 -> 디버깅하지 않고 시작을 클릭하거나 Ctrl + F5를 누릅니다.
  4. 앱이 배포되면 동작 컨트롤러에서 트리거를 끌어 와 Fitbox 를 해제합니다.

2장 - 커서 및 대상 피드백

목표

  • 커서 시각적 디자인 및 동작.
  • 응시 기반 커서 피드백.
  • 응시 기반 홀로그램 피드백.

작업을 기반으로 몇 가지 커서 디자인 원칙, 즉 다음을 수행합니다.

  • 커서는 항상 존재합니다.
  • 커서가 너무 작거나 커지지 않도록 합니다.
  • 콘텐츠를 방해하지 않습니다.

지침

  1. HoloToolkit\Input\Prefabs 폴더에서 InputManager 자산을 찾습니다.
  2. InputManager를 계층 구조로 끌어서 놓습니다.
  3. HoloToolkit\Input\Prefabs 폴더에서 커서 자산을 찾습니다.
  4. 커서를 계층 구조로 끌어서 놓습니다.
  5. 계층 구조에서 InputManager 개체를 선택합니다.
  6. Cursor 개체를 계층 구조Inspector 아래쪽에 있는 InputManager의 SimpleSinglePointerSelector커서 필드로 끕니다.

단순 단일 포인터 선택기 설정

빌드 및 배포

  1. 파일 > 빌드 설정에서 앱을 다시 빌드합니다.
  2. App 폴더를 엽니다.
  3. ModelExplorer Visual Studio Solution을 엽니다.
  4. 디버그 -> 디버깅하지 않고 시작을 클릭하거나 Ctrl + F5를 누릅니다.
  5. 커서가 그려지는 방식과 홀로그램에 닿는 경우 커서가 어떻게 변하는지 관찰합니다.

지침

  1. 계층 구조 패널에서 AstroMan-GEO_G-Back_Center>> 개체를 확장합니다.
  2. Interactible.cs를 두 번 클릭하여 Visual Studio에서 엽니다.
  3. Interactible.csIFocusable.OnFocusEnter()IFocusable.OnFocusExit() 콜백에서 줄의 주석 처리를 제거합니다. 포커스(응시 또는 컨트롤러 포인팅)가 특정 GameObject의 충돌체를 입력하고 종료할 때 Mixed Reality Toolkit의 InputManager에 의해 호출됩니다.
/* TODO: DEVELOPER CODING EXERCISE 2.d */

void IFocusable.OnFocusEnter()
{
    for (int i = 0; i < defaultMaterials.Length; i++)
    {
        // 2.d: Uncomment the below line to highlight the material when gaze enters.
        defaultMaterials[i].EnableKeyword("_ENVIRONMENT_COLORING");
    }
}

void IFocusable.OnFocusExit()
{
    for (int i = 0; i < defaultMaterials.Length; i++)
    {
        // 2.d: Uncomment the below line to remove highlight on material when gaze exits.
        defaultMaterials[i].DisableKeyword("_ENVIRONMENT_COLORING");
    }
}

참고

우리는 이상을 DisableKeyword 사용합니다EnableKeyword. 도구 키트의 표준 셰이더를 사용하여 사용자 고유의 앱에서 이러한 셰이더를 사용하려면 스크립트를 통해 자료에 액세스하기 위한 Unity 지침을 따라야 합니다. 이 경우 Resources 폴더에 필요한 강조 표시된 자료의 세 가지 변형 이 이미 포함되어 있습니다(이름에 강조가 있는 세 개의 재질을 찾습니다).

빌드 및 배포

  1. 이전과 마찬가지로 프로젝트를 빌드하고 HoloLens에 배포합니다.
  2. 응시가 개체를 겨냥할 때와 그렇지 않은 경우 어떻게 되는지 관찰합니다.

챕터 3 - 대상 지정 기술

목표

  • 홀로그램을 더 쉽게 대상으로 지정할 수 있습니다.
  • 자연스러운 머리 움직임을 안정화합니다.

지침

  1. 계층 구조 패널에서 InputManager 개체를 선택합니다.
  2. 검사기 패널에서 응시 안정기 스크립트를 찾습니다. 살펴보려는 경우 Visual Studio에서 열려면 클릭합니다.
    • 이 스크립트는 Raycast 데이터 샘플을 반복하고 정밀도 대상 지정에 대한 사용자의 시선을 안정화하는 데 도움이 됩니다.
  3. 검사기에서 저장된 안정성 샘플 값을 편집할 수 있습니다. 이 값은 안정화된 값을 계산하기 위해 안정화기가 반복하는 샘플 수를 나타냅니다.

4장 - 방향 표시기

목표

  • 홀로그램을 찾는 데 도움이 되도록 커서에 방향 표시기를 추가합니다.

지침

다음을 수행할 DirectionIndicator.cs 파일을 사용합니다.

  1. 사용자가 홀로그램을 응시하지 않는 경우 방향 표시기를 표시합니다.
  2. 사용자가 홀로그램을 응시하는 경우 방향 표시기를 숨깁니다.
  3. 홀로그램을 가리키도록 방향 표시기를 업데이트합니다.

이제 시작하겠습니다.

  1. 계층 구조 패널에서 AstroMan 개체를 클릭하고 화살표를 클릭하여 확장합니다.
  2. 계층 구조 패널의 AstroMan에서 DirectionalIndicator 개체를 선택합니다.
  3. 검사기 패널에서 구성 요소 추가 단추를 클릭합니다.
  4. 메뉴에서 검색 상자 방향 표시기를 입력합니다. 검색 결과를 선택합니다.
  5. 계층 구조 패널에서 Cursor 개체를InspectorCursor 속성으로 끌어서 놓습니다.
  6. 프로젝트 패널의 홀로그램 폴더에서 DirectionalIndicator 자산을 InspectorDirectional Indicator 속성으로 끌어서 놓습니다.
  7. 앱을 빌드 및 배포합니다.
  8. 방향 표시기 개체가 우주 비행사를 찾는 데 어떻게 도움이 되는지 확인합니다.

챕터 5 - 빌보드

목표

  • 광고판을 사용하여 홀로그램이 항상 당신을 향하게 합니다.

우리는 빌보드.cs 파일을 사용하여 GameObject 지향을 유지하여 항상 사용자를 마주하게 할 것입니다.

  1. 계층 구조 패널에서 AstroMan 개체를 선택합니다.
  2. 검사기 패널에서 구성 요소 추가 단추를 클릭합니다.
  3. 메뉴에서 검색 상자 빌보드를 입력 합니다. 검색 결과를 선택합니다.
  4. 검사기에서 피벗 축Y로 설정합니다.
  5. 사용해 보세요. 이전과 같이 앱을 빌드하고 배포합니다.
  6. 관점을 어떻게 변경하든 빌보드 개체가 어떻게 마주하는지 알아보세요.
  7. 지금은 AstroMan 에서 스크립트를 삭제합니다.

6장 - Tag-Along

목표

  • Tag-Along 사용하여 홀로그램이 방 주위를 따라가도록 합니다.

이 문제를 해결할 때 다음과 같은 디자인 제약 조건을 안내합니다.

  • 콘텐츠는 항상 한눈에 볼 수 있어야 합니다.
  • 콘텐츠가 방해가 되어서는 안 됩니다.
  • 헤드 잠금 콘텐츠가 불편합니다.

여기서 사용되는 솔루션은 "태그 따라" 접근 방식을 사용하는 것입니다.

태그를 따라가는 개체는 사용자의 뷰를 완전히 벗어나지 않습니다. 태그는 고무 밴드로 사용자의 머리에 부착된 개체라고 생각할 수 있습니다. 사용자가 이동하면 콘텐츠를 완전히 벗어나지 않고 보기 가장자리쪽으로 밀어 손쉽게 볼 수 있습니다. 사용자가 태그를 따라 개체를 응시할 때 더 완벽하게 표시됩니다.

다음을 수행할 SimpleTagalong.cs 파일을 사용합니다.

  1. Tag-Along 개체가 카메라 경계 내에 있는지 확인합니다.
  2. 뷰 frustum 내에 있지 않은 경우 뷰 frustum 내에서 부분적으로 Tag-Along 배치합니다.
  3. 그렇지 않으면 Tag-Along 사용자와의 기본 거리에 배치합니다.

이렇게 하려면 먼저 Interactible.cs 스크립트를 변경하여 TagalongAction을 호출해야 합니다.

  1. 코딩 연습 6.a(주석 처리 줄 84~87)를 완료하여 Interactible.cs 를 편집합니다.
/* TODO: DEVELOPER CODING EXERCISE 6.a */
// 6.a: Uncomment the lines below to perform a Tagalong action.
if (interactibleAction != null)
{
    interactibleAction.PerformAction();
}

Interactible.cs와 쌍을 이루는 InteractibleAction.cs 스크립트 홀로그램을 탭할 때 사용자 지정 작업을 수행합니다. 이 경우 태그를 사용하기 위해 특별히 하나를 사용합니다.

  • Scripts 폴더에서 TagalongAction.cs 자산을 클릭하여 Visual Studio에서 엽니다.
  • 코딩 연습을 완료하거나 다음으로 변경합니다.
    • 계층 구조 위쪽의 검색 창에서 ChestButton_Center 입력하고 결과를 선택합니다.
    • 검사기 패널에서 구성 요소 추가 단추를 클릭합니다.
    • 메뉴에서 Tagalong 작업 검색 상자를 입력합니다. 검색 결과를 선택합니다.
    • 홀로그램 폴더에서 Tagalong 자산을 찾습니다.
    • 계층에서 ChestButton_Center 개체 선택합니다. Project 패널에서 Inspector로 TagAlong개체를 끌어Object To Tagalong 속성으로 놓습니다.
    • Tagalong Action 개체를 Inspector에서 Interactible 스크립트의 상호 작용 가능 작업 필드로 끌어옵니다.
  • TagalongAction 스크립트를 두 번 클릭하여 Visual Studio에서 엽니다.

상호 작용 가능한 설정

다음을 추가해야 합니다.

  • TagalongAction 스크립트의 PerformAction 함수에 기능을 추가합니다(InteractibleAction에서 상속됨).
  • 응시 대상 개체에 광고판을 추가하고 피벗 축을 XY로 설정합니다.
  • 그런 다음, 개체에 간단한 Tag-Along 추가합니다.

TagalongAction.cs의 솔루션은 다음과 같습니다.

// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See LICENSE in the project root for license information.

using HoloToolkit.Unity;
using UnityEngine;

public class TagalongAction : InteractibleAction
{
    [SerializeField]
    [Tooltip("Drag the Tagalong prefab asset you want to display.")]
    private GameObject objectToTagalong;

    private void Awake()
    {
        if (objectToTagalong != null)
        {
            objectToTagalong = Instantiate(objectToTagalong);
            objectToTagalong.SetActive(false);

            /* TODO: DEVELOPER CODING EXERCISE 6.b */

            // 6.b: AddComponent Billboard to objectToTagAlong,
            // so it's always facing the user as they move.
            Billboard billboard = objectToTagalong.AddComponent<Billboard>();

            // 6.b: AddComponent SimpleTagalong to objectToTagAlong,
            // so it's always following the user as they move.
            objectToTagalong.AddComponent<SimpleTagalong>();

            // 6.b: Set any public properties you wish to experiment with.
            billboard.PivotAxis = PivotAxis.XY; // Already the default, but provided in case you want to edit
        }
    }

    public override void PerformAction()
    {
        // Recommend having only one tagalong.
        if (objectToTagalong == null || objectToTagalong.activeSelf)
        {
            return;
        }

        objectToTagalong.SetActive(true);
    }
}
  • 사용해 보세요. 앱을 빌드 및 배포합니다.
  • 콘텐츠가 응시점의 중심을 따라가는 방식을 확인하지만, 지속적으로 차단하지 않고 진행하지는 않습니다.