HoloLens(1세대) 입력 211: 제스처
중요
Mixed Reality Academy 자습서는 HoloLens(1세대), Unity 2017 및 Mixed Reality 몰입형 헤드셋을 염두에 두고 설계되었습니다. 따라서 이러한 디바이스 개발에 대한 지침을 계속 찾고 있는 개발자를 위해 이러한 자습서를 그대로 두는 것이 중요합니다. 이러한 자습서는 HoloLens 2 사용되는 최신 도구 집합 또는 상호 작용으로 업데이트되지 않으며 최신 버전의 Unity와 호환되지 않을 수 있습니다. 대신 지원되는 디바이스에서 계속 작동하도록 유지 관리됩니다. HoloLens 2에 대한 새로운 자습서 시리즈가 게시되었습니다.
제스처는 사용자 의도를 동작으로 바꿔줍니다. 제스처를 사용하면 사용자가 홀로그램과 상호 작용할 수 있습니다. 이 과정에서는 사용자의 손을 추적하고, 사용자 입력에 응답하고, 손 상태 및 위치에 따라 사용자에게 피드백을 제공하는 방법을 알아봅니다.
MR Basics 101에서는 간단한 에어 탭 제스처를 사용하여 홀로그램과 상호 작용했습니다. 이제 에어 탭 제스처를 넘어 새로운 개념을 탐색하여 다음을 수행합니다.
- 사용자의 손이 추적되는 시기를 감지하고 사용자에게 피드백을 제공합니다.
- 탐색 제스처를 사용하여 홀로그램을 회전합니다.
- 사용자의 손이 시야에서 벗어나려고 할 때 피드백을 제공합니다.
- 조작 이벤트를 사용하여 사용자가 손으로 홀로그램을 이동할 수 있습니다.
이 과정에서는 MR Input 210에서 빌드한 Unity 프로젝트 모델 Explorer 다시 살펴보겠습니다. 우리의 우주 비행사 친구는 이러한 새로운 제스처 개념의 우리의 탐구에 우리를 돕기 위해 돌아왔다.
중요
아래 각 챕터에 포함된 비디오는 이전 버전의 Unity 및 Mixed Reality 도구 키트를 사용하여 녹화되었습니다. 단계별 지침은 정확하고 최신이지만 오래된 해당 비디오에서 스크립트와 시각적 개체를 볼 수 있습니다. 비디오는 후손을 위해 포함되어 있으며 다루는 개념이 여전히 적용되므로 계속 포함됩니다.
디바이스 지원
과정 | HoloLens | 몰입형 헤드셋 |
---|---|---|
MR 입력 211: 제스처 | ✔️ | ✔️ |
시작하기 전에
필수 구성 요소
- 올바른 도구가 설치되어 구성된 Windows 10 PC입니다.
- 몇 가지 기본 C# 프로그래밍 기능.
- MR Basics 101을 완료해야 합니다.
- MR 입력 210을 완료해야 합니다.
- 개발을 위해 구성된 HoloLens 디바이스입니다.
프로젝트 파일
- 프로젝트에 필요한 파일을 다운로드합니다. Unity 2017.2 이상이 필요합니다.
- 바탕 화면 또는 기타 쉽게 연결할 수 있는 위치에 파일을 보관 해제합니다.
참고
다운로드하기 전에 소스 코드를 살펴보려면 GitHub에서 사용할 수 있습니다.
Errata 및 Notes
- 코드의 중단점을 적중하려면 도구->옵션->디버깅 아래의 Visual Studio에서 "내 코드만 사용"을 사용하지 않도록 설정(선택 취소)해야 합니다.
챕터 0 - Unity 설치
지침
- Unity를 시작합니다.
- 열기를 선택합니다.
- 이전에 보관하지 않은 제스처 폴더로 이동합니다.
- 시작/모델 Explorer 폴더를 찾아 선택합니다.
- 폴더 선택 단추를 클릭합니다.
- 프로젝트 패널에서 Scenes 폴더를 확장합니다.
- ModelExplorer 장면을 두 번 클릭하여 Unity에 로드합니다.
빌딩
- Unity에서 파일 > 빌드 설정을 선택합니다.
- Scenes/ModelExplorer가 빌드의 장면에 나열되지 않은 경우 열린 장면 추가를 클릭하여 장면을 추가합니다.
- HoloLens용으로 특별히 개발하는 경우 대상 디바이스 를 HoloLens로 설정합니다. 그렇지 않으면 모든 디바이스에 그대로 둡니다.
- 빌드 유형이 D3D로 설정되고 SDK가 최신 설치됨(SDK 16299 이상)으로 설정되어 있는지 확인합니다.
- 빌드를 클릭한 다음
- "App"이라는 새 폴더 를 만듭니다.
- App 폴더를 한 번 클릭합니다.
- 폴더 선택을 누르면 Unity가 Visual Studio용 프로젝트 빌드를 시작합니다.
Unity가 완료되면 파일 탐색기 창이 나타납니다.
- App 폴더를 엽니다.
- ModelExplorer Visual Studio 솔루션을 엽니다.
HoloLens에 배포하는 경우:
- Visual Studio의 위쪽 도구 모음을 사용하여 대상을 디버그에서 릴리스 로, ARM에서 x86으로 변경합니다.
- 로컬 컴퓨터 단추 옆에 있는 드롭다운 화살표를 클릭하고 원격 머신을 선택합니다.
- HoloLens 디바이스 IP 주소를 입력하고 인증 모드를 유니버설(암호화되지 않은 프로토콜)으로 설정합니다. 선택을 클릭합니다. 디바이스 IP 주소를 모르는 경우 설정 > 네트워크 & 인터넷 > 고급 옵션을 참조하세요.
- 위쪽 메뉴 모음에서 디버그 -> 디버깅하지 않고 시작을 클릭하거나 Ctrl + F5를 누릅니다. 디바이스에 처음으로 배포하는 경우 Visual Studio와 페어링해야 합니다.
- 앱이 배포되면 선택 제스처로 Fitbox를 해제합니다.
몰입형 헤드셋에 배포하는 경우:
- Visual Studio의 위쪽 도구 모음을 사용하여 대상을 디버그에서 릴리스 로, ARM에서 x64로 변경합니다.
- 배포 대상이 로컬 컴퓨터로 설정되어 있는지 확인합니다.
- 위쪽 메뉴 모음에서 디버그 -> 디버깅하지 않고 시작을 클릭하거나 Ctrl + F5를 누릅니다.
- 앱이 배포되면 동작 컨트롤러에서 트리거를 끌어 Fitbox 를 해제합니다.
참고
Visual Studio 오류 패널에서 빨간색 오류가 표시될 수 있습니다. 무시해도 안전합니다. 출력 패널로 전환하여 실제 빌드 진행률을 확인합니다. 출력 패널의 오류는 수정해야 합니다(대부분 스크립트의 실수로 인해 발생함).
1장 - 손에서 피드백을 검색했습니다.
목표
- 손 추적 이벤트를 구독합니다.
- 커서 피드백을 사용하여 손을 추적할 때 사용자에게 표시합니다.
참고
HoloLens 2 손은 손가락을 가리킬 때뿐만 아니라 손이 보일 때마다 발생합니다.
지침
- 계층 구조 패널에서 InputManager 개체를 확장합니다.
- GesturesInput 개체를 찾아 선택합니다.
InteractionInputSource.cs 스크립트는 다음 단계를 수행합니다.
- InteractionSourceDetected 및 InteractionSourceLost 이벤트를 구독합니다.
- HandDetected 상태를 설정합니다.
- InteractionSourceDetected 및 InteractionSourceLost 이벤트에서 구독을 취소합니다.
다음으로 , 커서를 MR Input 210 에서 사용자의 작업에 따라 피드백을 표시하는 커서로 업그레이드합니다.
- 계층 구조 패널에서 커서 개체를 선택하고 삭제합니다.
- 프로젝트 패널에서 CursorWithFeedback을 검색하고 계층 패널로 끌어옵니다.
- 계층 구조 패널에서 InputManager를 클릭한 다음 CursorWithFeedback 개체를 계층 구조의 Inspector 아래쪽에 있는 InputManager의 SimpleSinglePointerSelector커서 필드로 끌어옵니다.
- 계층 구조에서 CursorWithFeedback을 클릭합니다.
- 검사기 패널의 개체 커서 스크립트에서 커서 상태 데이터를 확장합니다.
커서 상태 데이터는 다음과 같이 작동합니다.
- 모든 관찰 상태는 손이 감지되지 않고 사용자가 단순히 주위를 둘러보고 있음을 의미합니다.
- 상호 작용 상태는 손 또는 컨트롤러가 검색됨을 의미합니다.
- 가리키기 상태는 사용자가 홀로그램을 보고 있다는 것을 의미합니다.
빌드 및 배포
- Unity에서 파일 > 빌드 설정을 사용하여 애플리케이션을 다시 빌드합니다.
- App 폴더를 엽니다.
- 아직 열려 있지 않으면 ModelExplorer Visual Studio Solution을 엽니다.
- 설정 중에 Visual Studio에서 이 프로젝트를 이미 빌드/배포한 경우 VS의 instance 열고 메시지가 표시되면 '모두 다시 로드'를 클릭할 수 있습니다.
- Visual Studio에서 디버그 -> 디버깅하지 않고 시작을 클릭하거나 Ctrl + F5를 누릅니다.
- 애플리케이션이 HoloLens에 배포된 후 에어 탭 제스처를 사용하여 fitbox를 해제합니다.
- 손을 보기로 이동하고 검지 손가락을 하늘로 가리키면 손 추적을 시작합니다.
- 손을 왼쪽, 오른쪽, 위아래로 이동합니다.
- 손이 감지된 후 보기에서 손실될 때 커서가 어떻게 변하는지 확인합니다.
- 몰입형 헤드셋을 사용하는 경우 컨트롤러를 연결하고 연결을 끊어야 합니다. 연결된 컨트롤러는 항상 "사용 가능"하므로 이 피드백은 몰입형 디바이스에서 덜 흥미롭습니다.
2장 - 탐색
목표
- 탐색 제스처 이벤트를 사용하여 우주 비행사를 회전합니다.
지침
앱에서 탐색 제스처를 사용하려면 Navigation 제스처가 발생할 때 개체를 회전하도록 GestureAction.cs 를 편집합니다. 또한 탐색을 사용할 수 있을 때 표시할 피드백을 커서에 추가합니다.
- 계층 구조 패널에서 CursorWithFeedback을 확장합니다.
- 홀로그램 폴더에서 ScrollFeedback 자산을 찾습니다.
- ScrollFeedback 프리팹을 계층 구조의 CursorWithFeedback GameObject로 끌어서 놓습니다.
- CursorWithFeedback을 클릭합니다.
- 검사기 패널에서 구성 요소 추가 단추를 클릭합니다.
- 메뉴에서 검색 상자 CursorFeedback을 입력합니다. 검색 결과를 선택합니다.
- ScrollFeedback 개체를 Hierarchy에서 Inspector의 커서 피드백 구성 요소에 있는 Scroll Detected Game Object 속성으로 끌어서 놓습니다.
- 계층 구조 패널에서 AstroMan 개체를 선택합니다.
- 검사기 패널에서 구성 요소 추가 단추를 클릭합니다.
- 메뉴에서 검색 상자 제스처 동작을 입력합니다. 검색 결과를 선택합니다.
다음으로 Visual Studio에서 GestureAction.cs 를 엽니다. 코딩 연습 2.c에서 스크립트를 편집하여 다음을 수행합니다.
- 탐색 제스처가 수행될 때마다 AstroMan 개체를 회전합니다.
- rotationFactor를 계산하여 개체에 적용되는 회전의 양을 제어합니다.
- 사용자가 손을 왼쪽이나 오른쪽으로 이동할 때 y축을 중심으로 개체를 회전합니다.
스크립트에서 코딩 연습 2.c를 완료하거나 코드를 아래 완성된 솔루션으로 바꿉니다.
using HoloToolkit.Unity.InputModule;
using UnityEngine;
/// <summary>
/// GestureAction performs custom actions based on
/// which gesture is being performed.
/// </summary>
public class GestureAction : MonoBehaviour, INavigationHandler, IManipulationHandler, ISpeechHandler
{
[Tooltip("Rotation max speed controls amount of rotation.")]
[SerializeField]
private float RotationSensitivity = 10.0f;
private bool isNavigationEnabled = true;
public bool IsNavigationEnabled
{
get { return isNavigationEnabled; }
set { isNavigationEnabled = value; }
}
private Vector3 manipulationOriginalPosition = Vector3.zero;
void INavigationHandler.OnNavigationStarted(NavigationEventData eventData)
{
InputManager.Instance.PushModalInputHandler(gameObject);
}
void INavigationHandler.OnNavigationUpdated(NavigationEventData eventData)
{
if (isNavigationEnabled)
{
/* TODO: DEVELOPER CODING EXERCISE 2.c */
// 2.c: Calculate a float rotationFactor based on eventData's NormalizedOffset.x multiplied by RotationSensitivity.
// This will help control the amount of rotation.
float rotationFactor = eventData.NormalizedOffset.x * RotationSensitivity;
// 2.c: transform.Rotate around the Y axis using rotationFactor.
transform.Rotate(new Vector3(0, -1 * rotationFactor, 0));
}
}
void INavigationHandler.OnNavigationCompleted(NavigationEventData eventData)
{
InputManager.Instance.PopModalInputHandler();
}
void INavigationHandler.OnNavigationCanceled(NavigationEventData eventData)
{
InputManager.Instance.PopModalInputHandler();
}
void IManipulationHandler.OnManipulationStarted(ManipulationEventData eventData)
{
if (!isNavigationEnabled)
{
InputManager.Instance.PushModalInputHandler(gameObject);
manipulationOriginalPosition = transform.position;
}
}
void IManipulationHandler.OnManipulationUpdated(ManipulationEventData eventData)
{
if (!isNavigationEnabled)
{
/* TODO: DEVELOPER CODING EXERCISE 4.a */
// 4.a: Make this transform's position be the manipulationOriginalPosition + eventData.CumulativeDelta
}
}
void IManipulationHandler.OnManipulationCompleted(ManipulationEventData eventData)
{
InputManager.Instance.PopModalInputHandler();
}
void IManipulationHandler.OnManipulationCanceled(ManipulationEventData eventData)
{
InputManager.Instance.PopModalInputHandler();
}
void ISpeechHandler.OnSpeechKeywordRecognized(SpeechEventData eventData)
{
if (eventData.RecognizedText.Equals("Move Astronaut"))
{
isNavigationEnabled = false;
}
else if (eventData.RecognizedText.Equals("Rotate Astronaut"))
{
isNavigationEnabled = true;
}
else
{
return;
}
eventData.Use();
}
}
다른 탐색 이벤트는 이미 일부 정보로 채워져 있습니다. GameObject를 도구 키트의 InputSystem 모달 스택에 푸시하므로 회전이 시작된 후에는 사용자가 우주 비행사에 집중할 필요가 없습니다. 이에 따라 제스처가 완료되면 스택에서 GameObject를 팝합니다.
빌드 및 배포
- Unity에서 애플리케이션을 다시 빌드한 다음 Visual Studio에서 빌드하고 배포하여 HoloLens에서 실행합니다.
- 우주 비행사를 응시하면 커서 양쪽에 두 개의 화살표가 나타납니다. 이 새로운 시각적 개체는 우주 비행사를 회전할 수 있음을 나타냅니다.
- HoloLens가 손을 추적하기 시작할 수 있도록 손을 준비 위치(하늘을 가리키는 검지 손가락)에 놓습니다.
- 우주 비행사를 회전하려면 검지 손가락을 손가락 모으기 위치로 낮추고 손을 왼쪽이나 오른쪽으로 이동하여 NavigationX 제스처를 트리거합니다.
챕터 3 - 손 지침
목표
- 손 안내 점수를 사용하여 손 추적이 손실되는 시기를 예측합니다.
- 커서 에 피드백을 제공하여 사용자의 손이 카메라의 보기 가장자리 가까이에 있는 경우를 표시합니다.
지침
- 계층 구조 패널에서 CursorWithFeedback 개체를 선택합니다.
- 검사기 패널에서 구성 요소 추가 단추를 클릭합니다.
- 메뉴의 검색 상자에 손 지침을 입력합니다. 검색 결과를 선택합니다.
- 프로젝트 패널 홀로그램 폴더에서 HandGuidanceFeedback 자산을 찾습니다.
- HandGuidanceFeedback 자산을 검사기 패널의 손 지침 표시기 속성으로 끌어서 놓습니다.
빌드 및 배포
- Unity에서 애플리케이션을 다시 빌드한 다음, Visual Studio에서 빌드하고 배포하여 HoloLens에서 앱을 경험합니다.
- 손을 보기로 가져오고 검지 손가락을 들어 추적합니다.
- 탐색 제스처를 사용하여 우주 비행사를 회전하기 시작합니다(검지 손가락과 엄지손가락을 함께 꼬집기).
- 손을 왼쪽, 오른쪽, 위쪽 및 아래로 이동합니다.
- 손이 제스처 프레임의 가장자리에 가까워지면 커서 옆에 화살표가 나타나 손 추적이 손실될 것임을 경고해야 합니다. 화살표는 추적이 손실되지 않도록 손을 이동할 방향을 나타냅니다.
4장 - 조작
목표
- 조작 이벤트를 사용하여 우주 비행사를 손으로 이동합니다.
- 커서에 대한 피드백을 제공하여 조작을 사용할 수 있는 시기를 사용자에게 알릴 수 있습니다.
지침
GestureManager.cs 및 AstronautManager.cs를 사용하면 다음을 수행할 수 있습니다.
- 음성 키워드(keyword) "우주 비행사 이동"을 사용하여 조작 제스처를 사용하도록 설정하고 "우주 비행사 회전"을 사용하여 사용하지 않도록 설정합니다.
- 조작 제스처 인식기 응답으로 전환합니다.
이제 시작하겠습니다.
- 계층 구조 패널에서 빈 GameObject를 새로 만듭니다. 이름을 "AstronautManager"로 지정합니다.
- 검사기 패널에서 구성 요소 추가 단추를 클릭합니다.
- 메뉴에서 검색 상자에 Astronaut Manager를 입력합니다. 검색 결과를 선택합니다.
- 검사기 패널에서 구성 요소 추가 단추를 클릭합니다.
- 메뉴에서 검색 상자 Speech Input Source를 입력합니다. 검색 결과를 선택합니다.
이제 우주 비행사의 상호 작용 상태를 제어하는 데 필요한 음성 명령을 추가합니다.
- 검사기에서 키워드 섹션을 확장합니다.
- + 오른쪽의 를 클릭하여 새 키워드(keyword) 추가합니다.
- 키워드를 이동 우주 비행사로 입력합니다. 원하는 경우 키 바로 가기를 자유롭게 추가할 수 있습니다.
- + 오른쪽의 를 클릭하여 새 키워드(keyword) 추가합니다.
- 키워드를 우주 비행사 회전으로 입력합니다. 원하는 경우 키 바로 가기를 자유롭게 추가할 수 있습니다.
- 해당 처리기 코드는 ISpeechHandler.OnSpeechKeywordRecognized 처리기의 GestureAction.cs에서 찾을 수 있습니다.
다음으로 커서에 대한 조작 피드백을 설정합니다.
- 프로젝트 패널 홀로그램 폴더에서 PathingFeedback 자산을 찾습니다.
- PathingFeedback 프리팹을 계층 구조의 CursorWithFeedback 개체로 끌어서 놓습니다.
- 계층 구조 패널에서 CursorWithFeedback을 클릭합니다.
- PathingFeedback 개체를계층 구조의 커서 피드백 구성 요소의 Pathing Detected Game Object 속성으로 끌어서 놓습니다.
이제 다음을 사용하도록 설정하려면 GestureAction.cs 에 코드를 추가해야 합니다.
- 조작 제스처가 감지되면 우주 비행사를 이동하는 IManipulationHandler.OnManipulationUpdated 함수에 코드를 추가합니다.
- 이동 벡터를 계산하여 우주 비행사를 이동해야 하는 위치를 손 위치에 따라 결정합니다.
- 우주 비행사를 새 위치로 이동합니다.
GestureAction.cs에서 코딩 연습 4.a를 완료하거나 아래 완료된 솔루션을 사용합니다.
using HoloToolkit.Unity.InputModule;
using UnityEngine;
/// <summary>
/// GestureAction performs custom actions based on
/// which gesture is being performed.
/// </summary>
public class GestureAction : MonoBehaviour, INavigationHandler, IManipulationHandler, ISpeechHandler
{
[Tooltip("Rotation max speed controls amount of rotation.")]
[SerializeField]
private float RotationSensitivity = 10.0f;
private bool isNavigationEnabled = true;
public bool IsNavigationEnabled
{
get { return isNavigationEnabled; }
set { isNavigationEnabled = value; }
}
private Vector3 manipulationOriginalPosition = Vector3.zero;
void INavigationHandler.OnNavigationStarted(NavigationEventData eventData)
{
InputManager.Instance.PushModalInputHandler(gameObject);
}
void INavigationHandler.OnNavigationUpdated(NavigationEventData eventData)
{
if (isNavigationEnabled)
{
/* TODO: DEVELOPER CODING EXERCISE 2.c */
// 2.c: Calculate a float rotationFactor based on eventData's NormalizedOffset.x multiplied by RotationSensitivity.
// This will help control the amount of rotation.
float rotationFactor = eventData.NormalizedOffset.x * RotationSensitivity;
// 2.c: transform.Rotate around the Y axis using rotationFactor.
transform.Rotate(new Vector3(0, -1 * rotationFactor, 0));
}
}
void INavigationHandler.OnNavigationCompleted(NavigationEventData eventData)
{
InputManager.Instance.PopModalInputHandler();
}
void INavigationHandler.OnNavigationCanceled(NavigationEventData eventData)
{
InputManager.Instance.PopModalInputHandler();
}
void IManipulationHandler.OnManipulationStarted(ManipulationEventData eventData)
{
if (!isNavigationEnabled)
{
InputManager.Instance.PushModalInputHandler(gameObject);
manipulationOriginalPosition = transform.position;
}
}
void IManipulationHandler.OnManipulationUpdated(ManipulationEventData eventData)
{
if (!isNavigationEnabled)
{
/* TODO: DEVELOPER CODING EXERCISE 4.a */
// 4.a: Make this transform's position be the manipulationOriginalPosition + eventData.CumulativeDelta
transform.position = manipulationOriginalPosition + eventData.CumulativeDelta;
}
}
void IManipulationHandler.OnManipulationCompleted(ManipulationEventData eventData)
{
InputManager.Instance.PopModalInputHandler();
}
void IManipulationHandler.OnManipulationCanceled(ManipulationEventData eventData)
{
InputManager.Instance.PopModalInputHandler();
}
void ISpeechHandler.OnSpeechKeywordRecognized(SpeechEventData eventData)
{
if (eventData.RecognizedText.Equals("Move Astronaut"))
{
isNavigationEnabled = false;
}
else if (eventData.RecognizedText.Equals("Rotate Astronaut"))
{
isNavigationEnabled = true;
}
else
{
return;
}
eventData.Use();
}
}
빌드 및 배포
- Unity에서 다시 빌드한 다음, Visual Studio에서 빌드 및 배포하여 HoloLens에서 앱을 실행합니다.
- HoloLens 앞에서 손을 이동하고 추적할 수 있도록 검지 손가락을 올립니다.
- 우주 비행사 위에 커서를 집중합니다.
- '우주 비행사 이동'을 말하여 조작 제스처로 우주 비행사를 이동합니다.
- 이제 프로그램이 조작 이벤트에 응답함을 나타내기 위해 커서 주위에 네 개의 화살표가 표시됩니다.
- 검지 손가락을 엄지 손가락으로 낮추고 함께 꼬집어 붙입니다.
- 손을 움직이면 우주 비행사도 움직입니다(조작임).
- 우주 비행사 조작을 중지하려면 검지 손가락을 올립니다.
- 참고: 손을 움직이기 전에 '우주 비행사 이동'이라고 말하지 않으면 탐색 제스처가 대신 사용됩니다.
- 회전 가능한 상태로 돌아가려면 '우주 비행사 회전'이라고 말합니다.
5장 - 모델 확장
목표
- 우주 비행사 모델을 사용자가 상호 작용할 수 있는 더 작은 여러 조각으로 확장합니다.
- 탐색 및 조작 제스처를 사용하여 각 조각을 개별적으로 이동합니다.
지침
이 섹션에서는 다음 작업을 수행합니다.
- 새 키워드(keyword) "모델 확장"을 추가하여 우주 비행사 모델을 확장합니다.
- 새 키워드 "모델 다시 설정"을 추가하여 모델을 원래 형식으로 반환합니다.
이전 챕터의 음성 입력 원본에 두 개의 키워드를 더 추가하여 이 작업을 수행합니다. 또한 인식 이벤트를 처리하는 또 다른 방법을 보여 줍니다.
- 검사기에서 AstronautManager를 다시 클릭하고 검사기에서 키워드섹션을 확장합니다.
- + 오른쪽의 를 클릭하여 새 키워드(keyword) 추가합니다.
- 키워드를 확장 모델로 입력합니다. 원하는 경우 키 바로 가기를 자유롭게 추가할 수 있습니다.
- + 오른쪽의 를 클릭하여 새 키워드(keyword) 추가합니다.
- 키워드를 다시 설정 모델로 입력합니다. 원하는 경우 키 바로 가기를 자유롭게 추가할 수 있습니다.
- 검사기 패널에서 구성 요소 추가 단추를 클릭합니다.
- 메뉴에서 검색 상자 음성 입력 처리기를 입력합니다. 검색 결과를 선택합니다.
- 포커스가 있는 GameObject에 관계없이 이러한 명령이 작동하도록 하려면 전역 수신기인지 확인합니다.
- + 단추를 클릭하고 키워드 드롭다운에서 모델 확장을 선택합니다.
- 응답 아래에서 를 + 클릭하고 계층 구조에서 None(개체) 필드로 AstronautManager를 끕니다.
- 이제 함수 없음 드롭다운을 클릭하고 , AstronautManager, ExpandModelCommand를 차례로 선택합니다.
- 음성 입력 처리기의 + 단추를 클릭하고 키워드 드롭다운에서 모델 다시 설정을 선택합니다.
- 응답 아래에서 를 + 클릭하고 계층 구조에서 None(개체) 필드로 AstronautManager를 끕니다.
- 이제 함수 없음 드롭다운을 클릭하고 , AstronautManager, ResetModelCommand를 차례로 선택합니다.
빌드 및 배포
- 사용해 보세요. 앱을 빌드하고 HoloLens에 배포합니다.
- 확장된 우주 비행사 모델을 보려면 모델 확장을 말합니다.
- 탐색을 사용하여 우주 비행사 복장의 개별 조각을 회전합니다.
- 우주 비행사 이동 후 조작을 사용하여 우주 비행사 소송의 개별 조각을 이동한다고 가정해 봅시다.
- 우주 비행사를 회전하여 조각을 다시 회전한다고 가정해 봅시다.
- 우주 비행사를 원래 형태로 되돌리려면 모델 재설정 을 말합니다.
끝
축하합니다! 이제 MR 입력 211: 제스처를 완료했습니다.
- 손 추적, 탐색 및 조작 이벤트를 감지하고 대응하는 방법을 알고 있습니다.
- 탐색 및 조작 제스처의 차이점을 이해합니다.
- 커서를 변경하여 손이 감지될 때, 손이 손실될 때 및 개체가 서로 다른 상호 작용(탐색 및 조작)을 지원하는 경우에 대한 시각적 피드백을 제공하는 방법을 알고 있습니다.