Leap Motion 및 Ultraleap 사용 - MRTK2

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

Leap Motion 데이터 공급자는 VR에 대한 관절식 손 추적을 가능하게 하며 편집기에서 신속한 프로토타입화에 유용할 수 있습니다. 데이터 공급자는 헤드셋에 탑재된 Leap Motion 컨트롤러를 사용하거나 책상 위에 올려 놓도록 구성할 수 있습니다.

LeapMotionIntroGif

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

MRTK 버전 Leap Motion Unity 모듈 버전 지원
2.6.x 4.5.0, 4.5.1
2.7.0 - 2.7.2 4.5.0, 4.5.1, 4.6.0, 4.7.0, 4.7.1, 4.8.0
2.7.3 4.5.0, 4.5.1, 4.6.0, 4.7.0, 4.7.1, 4.8.0, 4.9.1(아래 참고 참조)

참고

Unity 모듈 4.9.1에는 Gemini 5.2 추적 서비스 이상이 필요합니다. Unity 플러그 인 V4.9.1은 Unity 2019에서만 공식적으로 지원됩니다. 4.9.1 릴리스 정보를 참조하세요.

Unity 모듈의 이름이 V5.0.0의 Unity 플러그 인으로 바뀌었습니다.

MRTK 버전 지원되는 Ultraleap Unity 플러그 인 버전
2.8.0 5.3.0(아래 참고 참조)

참고

Unity 플러그 인 버전 5.0.0, 5.1.0 및 5.2.0은 MRTK 버전에서 지원 되지 않습니다 . 사용자는 5.3.0으로 업그레이드하는 것이 좋습니다. Unity 플러그 인 5.3.0에는 Gemini 5.2 추적 서비스 이상이 필요합니다.

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

  1. MRTK 및 Leap Motion Unity 모듈/Unity 플러그 인 가져오기

    • 최신 Leap Motion Tracking Software 를 설치하여 아직 설치되지 않은 경우 추적 서비스를 가져옵니다.
    • Microsoft.MixedReality.Toolkit.Foundation 패키지를 Unity 프로젝트로 가져옵니다.
    • 최신 버전의 Leap Motion Unity 모듈/Unity 플러그 인을 다운로드하여 프로젝트에 가져옵니다.
      • Unity 모듈의 경우: 프로젝트 내에서 Core 패키지만 가져옵니다.
      • Unity 플러그 인의 경우: 프로젝트 내에서 추적 패키지만 가져옵니다. 지금은 .unitypackage만 지원됩니다.

    중요

    Unity는 SelectionMode.OnlyUserModifiable을 사용하지 않으며 Unity 2019.4.19 이후 Ultraleap Hotkeys.cs 스크립트에서 다음 오류가 발생합니다. Assets\Plugins\LeapMotion\Core\Editor\Hotkeys.cs(24,91): 오류 CS0619: 'SelectionMode.OnlyUserModifiable'은 사용되지 않습니다. ''OnlyUserModifiable'은 사용되지 않습니다. 대신 '편집 가능'을 사용합니다. (UnityUpgradeable) -> 편집 가능'.

    문제를 resolve 위해 Plugins/LeapMotion/Core/Editor/Hotkeys.cs에 있는 Hotkeys.cs 스크립트에서 SelectionMode.OnlyUserModifiable을 SelectionMode.Editable로 변경합니다.

  2. MRTK와 Leap Motion Unity 모듈/Unity 플러그 인 통합

    • Unity 모듈/Unity 플러그 인이 프로젝트에 있으면 Mixed Reality>도구 키트>유틸리티>도약 동작>통합 Leap Motion Unity 모듈로 이동합니다.

    참고

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

    LeapMotionIntegration

  3. Leap Motion 데이터 공급자 추가

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

    LeapMotionProfileClone

    • 입력 구성 프로필 선택

    입력 구성 프로필 1

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

    LeapMotionInputProfileClone

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

    Leap 데이터 공급자 추가

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

    LeapDataProviderPreClone

    • Leap Motion 데이터 공급자에는 LeapControllerOrientation Leap Motion 컨트롤러의 위치인 속성이 포함되어 있습니다. LeapControllerOrientation.Headset 는 컨트롤러가 헤드셋에 탑재되었음을 나타냅니다. LeapControllerOrientation.Desk 는 컨트롤러가 책상 위에 평평하게 배치되었음을 나타냅니다. 기본값은 로 설정됩니다 LeapControllerOrientation.Headset.

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

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

      • 데스크 방향에는 책상 도약 LeapControllerOffset 손의 앵커 위치를 정의하는 속성이 포함되어 있습니다. 오프셋은 기본 카메라 위치를 기준으로 계산되며 기본값은 (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: 헤드셋(기본값)

    LeapHeadsetGif

    LeapHeadsetInspector

    LeapControllerOrientation:데스크

    LeapDeskGif

    LeapDeskInspector

  4. Leap Motion 데이터 공급자 테스트

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

    • 파일 > 빌드 설정으로 이동합니다.
    • Leap Motion 데이터 공급자를 사용하는 경우에만 독립 실행형 빌드가 지원됩니다.
    • 독립 실행형 빌드에 Windows Mixed Reality 헤드셋을 사용하는 방법에 대한 지침은 WMR 헤드셋(독립 실행형)에 MRTK 빌드 및 배포를 참조하세요.

손 관절 가져오기

Leap Motion 데이터 공급자를 사용하여 관절을 가져오는 것은 MRTK 관절 손의 손 관절 검색과 동일합니다. 자세한 내용은 손 추적을 참조하세요.

UNITY 장면에서 MRTK를 사용하고 입력 시스템 프로필에서 입력 데이터 공급자로 추가된 Leap Motion Data Provider를 사용하여 빈 게임 개체를 만들고 다음 예제 스크립트를 연결합니다.

이 스크립트는 도약 모션 핸드에서 손바닥 관절의 포즈를 검색하는 방법의 간단한 예입니다. 큐브가 오른쪽 도약을 따르는 동안 구는 왼쪽 윤을 따릅니다.

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 데이터 공급자를 사용하면 VR 헤드셋이 필요하지 않습니다. MRTK 앱에 대한 변경 내용은 헤드셋 없이 Leap hands를 사용하여 편집기에서 테스트할 수 있습니다.

도약 모션 핸즈는 VR 헤드셋이 연결되지 않고 편집기에서 표시됩니다. 가 LeapControllerOrientation헤드셋으로 설정된 경우 도약 모션 컨트롤러는 카메라를 앞으로 향하여 한 손으로 들고 있어야 합니다.

참고

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

프로젝트에서 Leap Motion 제거

  1. Mixed Reality 도구 키트>도약 모션별도의 도약 모션> Unity 모듈로 이동합니다.
    • Microsoft.MixedReality.Toolkit.Providers.LeapMotion.asmdef 파일의 참조로 Unity 새로 고침을 이 단계에서 수정합니다.
  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 도구 키트 > 유틸리티 > Leap Motion > Check 통합 상태로 이동합니다.
    • 그러면 Leap Motion Unity 모듈이 MRTK와 통합되었는지 여부에 대한 메시지가 포함된 팝업 창이 표시됩니다.
  • 메시지에 자산이 통합되지 않았다고 표시되면 다음을 수행합니다.
    • Leap Motion Unity 모듈이 프로젝트에 있는지 확인합니다.
    • 추가된 버전이 지원되는지 확인합니다. 지원되는 버전은 페이지 맨 위에 있는 표를 참조하세요.
    • 도구 키트 > 유틸리티 > 도약 모션 통합 Leap Motion > Unity 모듈을 Mixed Reality 사용해 보기

어셈블리 멀티 플레이어 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 을 참조하세요.

도약 동작 예제 장면

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

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

추가 정보