Windows 혼합 현실 입력(Input for Windows Mixed Reality)
오큘러스 입력

OpenVR 컨트롤러 입력

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가 모두 컴퓨터에 설치되어 있고 실행 중이어야 사용할 수 있습니다.

SteamVR 상태 메뉴
SteamVR 상태 메뉴

스크립트를 통해 조이스틱 이름 목록에 컨트롤러가 있는지 주기적으로 확인하여 해당 컨트롤러의 사용 가능 여부를 테스트할 수 있습니다. 컨트롤러를 끄거나 컨트롤러에서 배터리를 분리하면 UnityEngine.Input.GetJoystickNames()가 반환하는 목록에서 해당 컨트롤러의 이름이 사라지고 빈 문자열로 대체됩니다. 컨트롤러를 다시 켜면 해당 컨트롤러의 이름이 반환된 조이스틱 목록에 다시 표시됩니다.

Unity 입력 시스템 매핑

이어지는 내용에서는 OpenVR 기기에서 지원하는 각 컨트롤러 타입의 다이어그램과 함께 각 컨트롤러 버튼의 내부 Unity 입력 매핑을 설명합니다.

HTC Vive 컨트롤러

아래 다이어그램은 VR 애플리케이션용 HTC Vive 컨트롤러에서 사용 가능한 여러 입력을 보여줍니다.

HTC Vive 컨트롤러 입력 매핑(이미지 제공: developer.viveport.com)
HTC Vive 컨트롤러 입력 매핑(이미지 제공: developer.viveport.com)
1 메뉴 버튼
2 트랙패드
3 시스템 버튼
4 상태 표시등
5 마이크로-USB 포트
6 추적 센서
7 트리거
8 그립 버튼

Oculus Touch 컨트롤러

아래 다이어그램은 VR 애플리케이션용 Oculus Touch 컨트롤러에서 사용 가능한 여러 입력을 보여줍니다.

Oculus Touch 컨트롤러 입력 매핑(이미지 제공: developer.oculus.com)
Oculus Touch 컨트롤러 입력 매핑(이미지 제공: developer.oculus.com)

Knuckles 컨트롤러

아래 다이어그램은 VR 애플리케이션에서 Knuckles 컨트롤러에서 사용 가능한 여러 입력을 보여줍니다.

Valve Knuckles 컨트롤러 입력 매핑(이미지 제공: steamcommunity.com)
Valve Knuckles 컨트롤러 입력 매핑(이미지 제공: steamcommunity.com)

아래 표에서는 각 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 컨트롤러에서는 사용자가 트리거를 꾹 눌러야 이벤트 시스템이 입력 터치 이벤트를 생성합니다.
  • Oculus Touch 및 Valve Knuckles 컨트롤러에서는 Unity 입력이 터치를 감지하면 이벤트 시스템이 입력 터치 이벤트를 생성합니다. 그러므로 트리거를 꾹 누를 필요가 없습니다.

그립 트리거는 플랫폼에 따라 조금 차이가 있습니다.

  • HTC Vive 컨트롤러에는 각각 그립 버튼이 두 개씩 있지만, 모두 동일한 축에 매핑됩니다. 버튼을 누르지 않으면 값이 0.0이고, 누르면 값이 1.0이 됩니다. 0.0과 1.0 사이의 중간 값을 지정하는 것은 불가능합니다.

  • Oculus Touch 컨트롤러의 그립은 범위가 0.01.0인 아날로그 트리거입니다. 중간 값을 지정할 수 있습니다.

  • Valve Knuckles 컨트롤러의 그립은 각 개별 손가락 터치 센서 입력 값의 가중 평균을 사용합니다.

Windows 혼합 현실 입력(Input for Windows Mixed Reality)
오큘러스 입력