Leap Motion 및 Ultraleap 사용 - MRTK2
이 데이터 공급자를 사용하려면 Leap Motion 컨트롤러 가 필요합니다.
Leap Motion 데이터 공급자는 VR에 대한 관절식 손 추적을 가능하게 하며 편집기에서 신속한 프로토타입화에 유용할 수 있습니다. 데이터 공급자는 헤드셋에 탑재된 Leap Motion 컨트롤러를 사용하거나 책상 위에 올려 놓도록 구성할 수 있습니다.
이 공급자는 독립 실행형 플랫폼에 있는 동안 편집기 및 디바이스에서 사용할 수 있습니다. 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별) 손 추적 사용
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로 변경합니다.
MRTK와 Leap Motion Unity 모듈/Unity 플러그 인 통합
- Unity 모듈/Unity 플러그 인이 프로젝트에 있으면 Mixed Reality>도구 키트>유틸리티>도약 동작>통합 Leap Motion Unity 모듈로 이동합니다.
참고
Unity 모듈을 MRTK에 통합하면 프로젝트에 10개의 어셈블리 정의가 추가되고 Microsoft.MixedReality.Toolkit.Providers.LeapMotion 어셈블리 정의에 대한 참조가 추가됩니다. Visual Studio를 닫습니다.
Leap Motion 데이터 공급자 추가
- 새 Unity 장면 만들기
- Mixed Reality 도구 키트> 장면에추가 및 구성으로 이동하여 MRTK를 장면에 추가
- 계층 구조에서 MixedRealityToolkit 게임 개체를 선택하고 복사 및 사용자 지정을 선택하여 기본 혼합 현실 프로필을 복제합니다.
- 입력 구성 프로필 선택
- 입력 시스템 프로필에서 복제 를 선택하여 수정을 사용하도록 설정합니다.
- 입력 데이터 공급자 섹션을 열고 맨 위에서 데이터 공급자 추가를 선택하면 목록 끝에 새 데이터 공급자가 추가됩니다. 새 데이터 공급자를 열고 형식을 Microsoft.MixedReality.Toolkit.LeapMotion.Input > LeapMotionDeviceManager로 설정합니다.
- 복제를 선택하여 기본 Leap Motion 설정을 변경합니다.
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;
EnterPinchDistance
및ExitPinchDistance
는 손가락 모으기/에어 탭 제스처 감지에 대한 거리 임계값입니다. 손가락 모으기 제스처는 검지 손가락 끝과 엄지 팁 사이의 거리를 측정하여 계산됩니다. 입력 다운 이벤트에서 를 발생하려면 기본값EnterPinchDistance
이 0.02로 설정됩니다. 입력 위로 이벤트(손가락 모으기 종료)를 발생하려면 인덱스 손가락 끝과 엄지 팁 사이의 기본 거리는 0.05입니다.
LeapControllerOrientation
: 헤드셋(기본값)LeapControllerOrientation
:데스크Leap Motion 데이터 공급자 테스트
- Leap Motion 데이터 공급자가 입력 시스템 프로필에 추가된 후 재생을 누르고, Leap Motion Controller 앞에서 손을 이동하면 손의 공동 표현이 표시됩니다.
프로젝트 빌드
- 파일 > 빌드 설정으로 이동합니다.
- 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 제거
-
Mixed Reality 도구 키트>도약 모션별도의 도약 모션> Unity 모듈로 이동합니다.
- Microsoft.MixedReality.Toolkit.Providers.LeapMotion.asmdef 파일의 참조로 Unity 새로 고침을 이 단계에서 수정합니다.
- Unity 닫기
- 열려 있는 경우 Visual Studio 닫기
- 파일 탐색기 열고 MRTK Unity 프로젝트의 루트로 이동합니다.
- UnityProjectName/Library 디렉터리 삭제
- UnityProjectName/Assets/Plugins/LeapMotion 디렉터리를 삭제합니다.
- UnityProjectName/Assets/Plugins/LeapMotion.meta 파일을 삭제합니다.
- 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 패키지에 포함되어 있습니다.