Leap Motion 사용

이 데이터 공급자를 사용하려면 Leap Motion Controller가 필요합니다.

Leap Motion Data Provider VR에 대한 굴절형 손 추적을 지원하며 편집기에서 신속한 프로토타이핑에 유용할 수 있습니다. 데이터 공급자는 헤드셋에 탑재된 Leap Motion Controller를 사용하거나 데스크에 위를 올려 놓도록 구성할 수 있습니다.

LeapMotionIntroGif

이 공급자는 독립 실행형 플랫폼에 있는 동안 편집기 및 디바이스에서 사용할 수 있습니다. UWP 플랫폼에 있는 동안 편집기에서 사용할 수도 있지만 UWP 빌드에서는 사용할 수 없습니다.

MRTK 버전 Leap Motion Unity 모듈 버전이 지원됨
2.6.x 4.5.0, 4.5.1
2.7.x 4.5.0, 4.5.1, 4.6.0, 4.7.0, 4.7.1, 4.8.0

MRTK에서 Leap Motion(Ultraleap) 손 추적 사용

  1. MRTK 및 Leap Motion Unity 모듈 가져오기

    • 최신 Leap Motion SDK가 아직 설치되지 않은 경우 설치
    • Microsoft.MixedReality.Toolkit 가져옵니다. Unity 프로젝트에 대한 Foundation 패키지입니다.
    • 최신 버전의 Leap Motion Unity 모듈을 다운로드하여 프로젝트로 가져오기
      • Unity 모듈 내에서만 Core 패키지 가져오기
  2. MRTK와 Leap Motion Unity 모듈 통합

    • Unity 모듈이 프로젝트에 있는 후 Mixed Reality ToolkitLeap Motion통합 Leap Motion Unity 모듈로 이동합니다.

    참고

    Unity 모듈을 MRTK에 통합하는 경우 프로젝트에 10개의 어셈블리 정의가 추가되고 Microsoft.MixedReality.Toolkit 대한 참조가 추가됩니다. Providers.LeapMotion 어셈블리 정의입니다. Visual Studio를 닫습니다.

    LeapMotionIntegration

  3. Leap Motion Data Provider 추가

    • 새 Unity 장면 만들기
    • 장면에추가 및 구성 Mixed Reality Toolkit 이동하여 MRTK를 장면에 추가합니다.
    • 계층 구조에서 MixedRealityToolkit 게임 개체를 선택하고 복사 및 사용자 지정을 선택하여 기본 혼합 현실 프로필을 복제합니다.

    LeapMotionProfileClone

    • 입력 구성 프로필 선택

    입력 구성 프로필 1

    • 입력 시스템 프로필에서 복제를 선택하여 수정을 사용하도록 설정합니다.

    LeapMotionInputProfileClone

    • 입력 데이터 공급자 섹션을 열고 맨 위에서 Data Provider 추가를 선택하면 목록 끝에 새 데이터 공급자가 추가됩니다. 새 데이터 공급자를 열고 형식을Microsoft.MixedReality.Toolkit 설정합니다. LeapMotion.Input LeapMotionDeviceManager

    Leap Add Data Provider

    • 복제를 선택하여 기본 Leap Motion 설정을 변경합니다.

    LeapDataProviderPreClone

    • Leap Motion Data Provider Leap Motion LeapControllerOrientation Controller의 위치인 속성을 포함합니다. LeapControllerOrientation.Headset 는 컨트롤러가 헤드셋에 탑재되었음을 나타냅니다. LeapControllerOrientation.Desk 는 컨트롤러가 데스크에 평면으로 배치되었음을 나타냅니다. 기본값은 로 LeapControllerOrientation.Headset 설정됩니다.

    • 각 컨트롤러 방향에는 오프셋 속성이 포함됩니다.

      • 헤드셋 방향 오프셋 속성은 LeapXRServiceProvider 구성 요소의 오프셋 속성을 미러합니다. LeapVRDeviceOffsetMode에는 기본, 수동 헤드 오프셋 및 변환의 세 가지 옵션이 있습니다. 오프셋 모드가 Default이면 Leap Motion Controller에 오프셋이 적용되지 않습니다. 수동 헤드 오프셋 모드에서는 , 및 의 세 가지 속성을 수정할 수 LeapVRDeviceOffsetYLeapVRDeviceOffsetZLeapVRDeviceTiltX 있습니다. 그런 다음 축 오프셋 속성 값이 기본 컨트롤러 배치에 적용됩니다. 변환 오프셋 모드에는 LeapVRDeviceOrigin Leap Motion Controller의 새 원점이 지정되는 Transform 속성이 포함되어 있습니다.

      • Desk 방향에는 데스크 윤손의 앵커 위치를 정의하는 속성이 포함되어 있습니다. 오프셋은 주 카메라 위치를 기준으로 계산되며, 기본값은 (0,-0.2, 0.35)이며, 카메라가 전면 및 보기에 표시되도록 합니다.

        참고

        프로필의 오프셋 속성은 애플리케이션이 시작될 때 한 번 적용됩니다. 런타임 중에 값을 수정하려면 Leap Motion 디바이스 관리자에서 Leap Motion Service 공급자를 받습니다.

        LeapMotionDeviceManager leapMotionDeviceManager = CoreServices.GetInputSystemDataProvider<LeapMotionDeviceManager>();
        LeapXRServiceProvider leapXRServiceProvider = leapMotionDeviceManager.LeapMotionServiceProvider as LeapXRServiceProvider; 
        
    • EnterPinchDistanceExitPinchDistance 는 손가락 모으기/에어 탭 제스처 감지에 대한 거리 임계값입니다. 손가락 모으기 제스처는 인덱스 손가락 팁과 엄지 팁 사이의 거리를 측정하여 계산됩니다. 입력 다운 이벤트에서 를 발생시키기 위해 EnterPinchDistance 기본값은 0.02로 설정됩니다. 입력 시 을 발생시키기 위해(손가락 모으기 종료) 인덱스 손가락 팁과 엄지 팁 사이의 기본 거리는 0.05입니다.

    LeapControllerOrientation: 헤드셋(기본값) LeapControllerOrientation: Desk
    LeapHeadsetGif LeapDeskGif
    LeapHeadsetInspector LeapDeskInspector
  4. Leap Motion Data Provider 테스트

    • Leap Motion Data Provider 입력 시스템 프로필에 추가된 후 재생을 누르고, Leap Motion Controller 앞에서 손을 움직이면 손의 공동 표현이 표시됩니다.
  5. 프로젝트 빌드

손 조인트 얻기

Leap Motion Data Provider 사용하여 조인을 가져오는 것은 MRTK에 대한 손 공동 검색과 동일합니다. 자세한 내용은 손 추적을참조하세요.

Unity 장면에 MRTK가 있고 Leap Motion Data Provider 입력 시스템 프로필에 입력 Data Provider 추가된 경우 빈 게임 개체를 만들고 다음 예제 스크립트를 연결합니다.

이 스크립트는 Leap Motion Hand에서 손만의 자세를 검색하는 방법의 간단한 예입니다. 구는 왼쪽 윤의 손 뒤에, 큐브는 오른쪽 윤을 따릅니다.

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

public class LeapHandJoints : MonoBehaviour, IMixedRealityHandJointHandler
{
    private GameObject leftHandSphere;
    private GameObject rightHandCube;

    private void Start()
    {
        // Register the HandJointHandler as a global listener
        CoreServices.InputSystem.RegisterHandler<IMixedRealityHandJointHandler>(this);

        // Create a sphere to follow the left hand palm position
        leftHandSphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
        leftHandSphere.transform.localScale = Vector3.one * 0.03f;

        // Create a cube to follow the right hand palm position
        rightHandCube = GameObject.CreatePrimitive(PrimitiveType.Cube);
        rightHandCube.transform.localScale = Vector3.one * 0.03f;
    }

    public void OnHandJointsUpdated(InputEventData<IDictionary<TrackedHandJoint, MixedRealityPose>> eventData)
    {
        if (eventData.Handedness == Handedness.Left)
        {
            Vector3 leftHandPalmPosition = eventData.InputData[TrackedHandJoint.Palm].Position;
            leftHandSphere.transform.position = leftHandPalmPosition;
        }

        if (eventData.Handedness == Handedness.Right)
        {
            Vector3 rightHandPalmPosition = eventData.InputData[TrackedHandJoint.Palm].Position;
            rightHandCube.transform.position = rightHandPalmPosition;
        }
    }

Unity 편집기 워크플로 팁

Leap Motion Data Provider 사용하면 VR 헤드셋이 필요하지 않습니다. MRTK 앱에 대한 변경 내용은 헤드셋 없이 윤손을 사용하여 편집기에서 테스트할 수 있습니다.

LEAP Motion Hands는 VR 헤드셋을 연결하지 않고 편집기에서 표시됩니다. 가 LeapControllerOrientationLeapControllerOrientation로 설정된 경우 Leap Motion 컨트롤러는 카메라를 앞으로 향하여 한 손으로 보유해야 합니다.

참고

편집기에서 WASD 키를 사용하여 카메라를 이동하고 LeapControllerOrientationLeapControllerOrientation경우 손은 카메라를 따르지 않습니다. 은 LeapControllerOrientationLeapControllerOrientation설정된 동안 VR 헤드셋이 연결된 경우에만 카메라 이동을 따릅니다. 이 Desk 로 설정된 경우 Leap hands는 편집기에서 카메라 이동을 LeapControllerOrientation 따릅니다. LeapControllerOrientation

Project Leap Motion 제거

  1. Mixed Reality ToolkitLeap Motion별도의 Leap Motion Unity 모듈로 이동합니다.
    • Microsoft.MixedReality.Toolkit Unity를 참조로 새로 고치도록 합니다. Providers.LeapMotion.asmdef 파일은 이 단계에서 수정됩니다.
  2. Unity 닫기
  3. Visual Studio 닫습니다(열려 있는 경우).
  4. 파일 탐색기 열고 MRTK Unity 프로젝트의 루트로 이동합니다.
    • UnityProjectName/Library 디렉터리 삭제
    • UnityProjectName/Assets/Plugins/LeapMotion 디렉터리를 삭제합니다.
    • UnityProjectName/Assets/Plugins/LeapMotion.meta 파일을 삭제합니다.
  5. Unity 다시 열기

Unity 2018.4에서는 라이브러리 및 Leap Motion Core 자산을 삭제한 후에도 콘솔에 오류가 남아 있음을 알 수 있습니다. 다시 연 후 오류가 기록되면 Unity를 다시 시작합니다.

일반 오류

Leap Motion이 MRTK와 통합되지 않았습니다.

Leap Motion Unity 모듈이 MRTK와 통합되었는지 테스트하려면 다음을 수행합니다.

  • Mixed Reality Toolkit 유틸리티 Leap Motion > Check > 통합 상태로 이동합니다.
    • 그러면 Leap Motion Unity 모듈이 MRTK와 통합되었는지 여부에 대한 메시지가 포함된 팝업 창이 표시됩니다.
  • 자산이 통합되지 않았다는 메시지가 표시됩니다.
    • Leap Motion Unity 모듈이 프로젝트에 있는지 확인합니다.
    • 추가된 버전이 지원되는지 확인합니다. 지원되는 버전은 페이지 맨 위에 있는 표를 참조하세요.
    • Mixed Reality Toolkit 유틸리티 Leap Motion 통합 Leap Motion Unity 모듈 사용해 >> 보세요.

어셈블리 다중 재생 HLAPI 복사 실패

Leap Motion Unity Core 자산을 가져올 때 이 오류가 기록될 수 있습니다.

Copying assembly from 'Temp/com.unity.multiplayer-hlapi.Runtime.dll' to 'Library/ScriptAssemblies/com.unity.multiplayer-hlapi.Runtime.dll' failed

해결 방법

  • 단기 솔루션은 Unity를 다시 시작하는 것입니다. 자세한 내용은 문제 7761을 참조하세요.

Leap Motion 예제 장면

예제 장면에서는 DefaultLeapMotionConfiguration 프로필을 사용하고 Unity 프로젝트가 Leap Motion Data Provider 사용하도록 올바르게 구성되었는지 확인합니다.

예제 장면에는 Microsoft.MixedReality.Toolkit 포함되어 있습니다. MRTK/Examples/Demos/HandTracking/ 디렉터리에 있는 예제 패키지입니다.

참고 항목