Unity XR 입력 매뉴얼 (한국어 해설)
Unity에서 XR(가상 현실 및 증강 현실) 입력 시스템을 사용하여 다양한 입력 기기와 상호작용할 수 있습니다. 이 문서에서는 Unity의 XR 입력 기능과 관련된 API를 간단히 설명하고, 코드 예제를 포함하여 실제 활용 방법을 안내하겠습니다.
XR 입력 개요
XR 입력 시스템은 가상 현실, 증강 현실, 및 혼합 현실 애플리케이션에서 사용되는 다양한 입력 장치에 대한 정보를 제공합니다. 다음은 이 시스템에서 제공되는 주요 기능입니다:
- XR 입력 매핑
- 입력 기기 접근
- 햅틱 피드백
XR 입력 매핑
Unity는 InputFeatureUsage
라는 구조체를 제공하여 다양한 입력 기기에서 발생하는 입력을 표준화합니다. 이는 버튼, 트리거, 조이스틱 등의 입력 요소를 통합적으로 다룰 수 있도록 합니다.
예시: InputFeatureUsage 매핑 표
InputFeatureUsage | 기능 타입 | 레거시 입력 인덱스 | WMROculus | GearVR | Daydream | OpenVR (Full) | Vive |
---|---|---|---|---|---|---|---|
primaryButton | 버튼 | [2/0] | [X/A] | 기본 | 기본 | 기본 | 기본 |
triggerButton | 버튼 | [14/15] | 트리거 | 트리거 | 트리거 | 트리거 | 트리거 |
gripButton | 버튼 | [4/5] | 그립 | 그립 | 그립 | 그립 | 그립 |
primary2DAxis | 2D 축 | [(1,2)/(4,5)] | 터치패드 | 조이스틱 | 터치패드 | 트랙패드/조이스틱 | 조이스틱 |
각 InputFeatureUsage
는 공통 입력 액션을 나타내며, 플랫폼에 따라 다르게 매핑될 수 있습니다.
입력 기기 접근
Unity는 다양한 입력 기기에 대한 정보를 InputDevice
를 통해 제공합니다. 이 기기는 컨트롤러, 스마트폰, 헤드셋 등 다양한 형태를 포함합니다.
사용 예시
var inputDevices = new List<UnityEngine.XR.InputDevice>();
UnityEngine.XR.InputDevices.GetDevices(inputDevices);
foreach (var device in inputDevices)
{
Debug.Log(string.Format("Device found with name '{0}' and role '{1}'", device.name, device.role.ToString()));
}
이 코드는 현재 연결된 모든 입력 기기를 나열합니다. InputDevice
는 각 기기의 상태를 확인하고, 유효성을 검사할 수 있습니다.
입력 기기의 입력 기능에 접근
특정 InputDevice
에서 버튼 클릭 상태와 같은 입력 기능을 읽을 수 있습니다. 이를 통해 사용자 상호작용을 감지하고 반응할 수 있습니다.
예시: 입력 기능 값 확인
bool triggerValue;
if (device.TryGetFeatureValue(UnityEngine.XR.CommonUsages.triggerButton, out triggerValue) && triggerValue)
{
Debug.Log("Trigger button is pressed.");
}
위의 코드는 트리거 버튼이 눌렸는지를 확인하여 로그 메세지를 출력합니다.
햅틱 피드백
햅틱 감응은 유저에게 물리적 피드백을 제공하는 중요한 기능입니다. 입력 기기가 햅틱 기능을 지원하는 경우 이를 활용할 수 있습니다.
예시: 햅틱 피드백 전송
List<UnityEngine.XR.InputDevice> devices = new List<UnityEngine.XR.InputDevice>();
UnityEngine.XR.InputDevices.GetDevicesWithRole(UnityEngine.XR.InputDeviceRole.RightHanded, devices);
foreach (var device in devices)
{
UnityEngine.XR.HapticCapabilities capabilities;
if (device.TryGetHapticCapabilities(out capabilities))
{
if (capabilities.supportsImpulse)
{
uint channel = 0;
float amplitude = 0.5f;
float duration = 1.0f;
device.SendHapticImpulse(channel, amplitude, duration);
}
}
}
위 코드는 오른손 수신 기기에 햅틱 임펄스를 보내는 예시입니다.
결론
Unity의 XR 입력 시스템을 통해 다양한 입력 기기와 상호작용하고, 유저에게 더욱 몰입감 있는 경험을 제공할 수 있습니다. 위에서 설명한 예시와 기능을 활용하여 유익한 XR 애플리케이션을 개발할 수 있습니다. 중요한 것은 다양한 기기를 고려한 코드를 작성하는 것이며, 이를 통해 더욱 폭넓은 사용자 경험을 창출할 수 있습니다.