Version: 2018.1
Windows 혼합 현실 입력
오큘러스 입력

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 혼합 현실 입력
오큘러스 입력