Unity 에디터에서 OpenVR 추적 컨트롤러를 지원하기 위해 Unity VR 서브시스템은 VR 컨트롤러 입력을 별도의 조이스틱으로 제공합니다. UnityEngine.Input 클래스를 사용하여 축 및 버튼 값에 액세스할 수 있습니다.
OpenVR의 Unity 통합 설명에서는 축 및 버튼 상태를 나타낼 때 특정 하드웨어가 언급되어 있지 않습니다. 이 페이지에서는 OpenVR이 지원하는 세 가지 컨트롤러 타입인 HTC Vive, Oculus Touch, Valve Knuckles 컨트롤러의 축 및 버튼 매핑에 대해 설명합니다.
올바르게 설정되고 연결된 OpenVR 호환 컨트롤러의 이름은 내부적으로 OpenVR Controller - Left 또는 OpenVR Controller - Right 로 지정됩니다. UnityEngine.Input.GetJoystickNames()가 반환하는 목록을 통해 이러한 이름을 확인할 수 있습니다. 컨트롤러가 사용 가능하다면, Steam으로 테스트할 때 SteamVR 상태 메뉴에 해당 컨트롤러가 녹색으로 강조 표시됩니다. 이 메뉴는 Steam 및 SteamVR가 모두 컴퓨터에 설치되어 있고 실행 중이어야 사용할 수 있습니다.
스크립트를 통해 조이스틱 이름 목록에 컨트롤러가 있는지 주기적으로 확인하여 해당 컨트롤러의 사용 가능 여부를 테스트할 수 있습니다. 컨트롤러를 끄거나 컨트롤러에서 배터리를 분리하면 UnityEngine.Input.GetJoystickNames()가 반환하는 목록에서 해당 컨트롤러의 이름이 사라지고 빈 문자열로 대체됩니다. 컨트롤러를 다시 켜면 해당 컨트롤러의 이름이 반환된 조이스틱 목록에 다시 표시됩니다.
이어지는 내용에서는 OpenVR 기기에서 지원하는 각 컨트롤러 타입의 다이어그램과 함께 각 컨트롤러 버튼의 내부 Unity 입력 매핑을 설명합니다.
아래 다이어그램은 VR 애플리케이션용 HTC Vive 컨트롤러에서 사용 가능한 여러 입력을 보여줍니다.
1 | 메뉴 버튼 |
---|---|
2 | 트랙패드 |
3 | 시스템 버튼 |
4 | 상태 표시등 |
5 | 마이크로-USB 포트 |
6 | 추적 센서 |
7 | 트리거 |
8 | 그립 버튼 |
아래 다이어그램은 VR 애플리케이션용 Oculus Touch 컨트롤러에서 사용 가능한 여러 입력을 보여줍니다.
아래 다이어그램은 VR 애플리케이션에서 Knuckles 컨트롤러에서 사용 가능한 여러 입력을 보여줍니다.
아래 표에서는 각 OpenVR 지원 컨트롤러의 컨트롤러 입력, 컨트롤러의 상호작용 타입, Unity 버튼 ID와 축 ID, 각 축의 값 범위를 확인할 수 있습니다.
HTC Vive 컨트롤러 | Oculus Touch 컨트롤러 | Valve Knuckles 컨트롤러 | 인터랙션 타입 | Unity 버튼 ID | Unity 축 ID | Unity 축의 값 범위 |
---|---|---|---|---|---|---|
왼쪽 컨트롤러 메뉴 버튼(1) | Button.Three | 왼쪽 컨트롤러 안쪽 버튼 | 누름 | 2 | ||
오른쪽 컨트롤러 메뉴 버튼(1) | Button.One | 오른쪽 컨트롤러 안쪽 버튼 | 누름 | 0 | ||
왼쪽 컨트롤러 바깥쪽 버튼 | 누름 | 3 | ||||
오른쪽 컨트롤러 바깥쪽 버튼 | 누름 | 1 | ||||
왼쪽 컨트롤러 트랙패드 (2) | Button.PrimaryThumbstick | 왼쪽 컨트롤러 트랙패드 | 누름 | 8 | ||
오른쪽 컨트롤러 트랙패드 (2) | Button.SecondaryThumbstick | 오른쪽 컨트롤러 트랙패드 | 누름 | 9 | ||
왼쪽 컨트롤러 트랙패드 (2) | Button.PrimaryThumbstick | 왼쪽 컨트롤러 트랙패드 | 터치 | 16 | ||
오른쪽 컨트롤러 트랙패드 (2) | Button.SecondaryThumbstick | 오른쪽 컨트롤러 트랙패드 | 터치 | 17 | ||
왼쪽 컨트롤러 트랙패드 (2) | Axis2D.PrimaryThumbstick | 왼쪽 컨트롤러 트랙패드 | 수평 이동 | 1 | –1.0–1.0 | |
왼쪽 컨트롤러 트랙패드 (2) | Axis2D.PrimaryThumbstick | 왼쪽 컨트롤러 트랙패드 | 수직 이동 | 2 | –1.0–1.0 | |
오른쪽 컨트롤러 트랙패드 (2) | Axis2D.SecondaryThumbstick | 오른쪽 컨트롤러 트랙패드 | 수평 이동 | 4 | –1.0–1.0 | |
오른쪽 컨트롤러 트랙패드 (2) | Axis2D.SecondaryThumbstick | 오른쪽 컨트롤러 트랙패드 | 수직 이동 | 5 | –1.0–1.0 | |
왼쪽 컨트롤러 트리거 (7) | Axis1D.PrimaryIndexTrigger | 왼쪽 컨트롤러 트리거 | 터치 | 14 | ||
오른쪽 컨트롤러 트리거 (7) | Axis1D.SecondaryIndexTrigger | 오른쪽 컨트롤러 트리거 | 터치 | 15 | ||
왼쪽 컨트롤러 트리거 (7) | Axis1D.PrimaryIndexTrigger | 왼쪽 컨트롤러 트리거 | 꾹 누름 | 9 | 0.0–1.0 | |
오른쪽 컨트롤러 트리거 (7) | Axis1D.SecondaryIndexTrigger | 오른쪽 컨트롤러 트리거 | 꾹 누름 | 10 | 0.0–1.0 | |
왼쪽 컨트롤러 그립 버튼(8) | Axis1D.PrimaryHandTrigger | 왼쪽 컨트롤러 그립 평균 | 꾹 누름 | 11 | 0.0–1.0 | |
오른쪽 컨트롤러 그립 버튼(8) | Axis1D.SecondaryHandTrigger | 오른쪽 컨트롤러 그립 평균 | 꾹 누름 | 12 | 0.0–1.0 | |
왼쪽 컨트롤러 집게 손가락 끝 센서 | 20 | 0.0–1.0 | ||||
오른쪽 컨트롤러 집게 손가락 끝 센서 | 21 | 0.0–1.0 | ||||
왼쪽 컨트롤러 가운데 손가락 끝 센서 | 22 | 0.0–1.0 | ||||
오른쪽 컨트롤러 가운데 손가락 끝 센서 | 23 | 0.0–1.0 | ||||
왼쪽 컨트롤러 넷째 손가락 끝 센서 | 24 | 0.0–1.0 | ||||
오른쪽 컨트롤러 넷째 손가락 끝 센서 | 25 | 0.0–1.0 | ||||
왼쪽 컨트롤러 새끼 손가락 끝 센서 | 26 | 0.0–1.0 | ||||
오른쪽 컨트롤러 새끼 손가락 끝 센서 | 27 | 0.0–1.0 |
참고: 위 표에 나타나지 않은 하드웨어 기능은 OpenVR API를 통해서도 노출되지 않으므로 Unity의 입력 시스템을 통해 노출되지 않습니다.
OpenVR 기기를 지원하는 애플리케이션을 개발할 때에는 세 가지 컨트롤러의 버튼 입력 이벤트 트리거 및 응답 속도와 관련된 일부 차이점을 알아두는 것이 좋습니다.
Unity 터치 입력 이벤트는 플랫폼 컨트롤러에 따라 조금 차이가 있습니다.
그립 트리거는 플랫폼에 따라 조금 차이가 있습니다.
HTC Vive 컨트롤러에는 각각 그립 버튼이 두 개씩 있지만, 모두 동일한 축에 매핑됩니다. 버튼을 누르지 않으면 값이 0.0이고, 누르면 값이 1.0이 됩니다. 0.0과 1.0 사이의 중간 값을 지정하는 것은 불가능합니다.
Oculus Touch 컨트롤러의 그립은 범위가 0.01.0인 아날로그 트리거입니다. 중간 값을 지정할 수 있습니다.
Valve Knuckles 컨트롤러의 그립은 각 개별 손가락 터치 센서 입력 값의 가중 평균을 사용합니다.