Unity XR SDK 입력 하위 시스템 가이드
이 문서는 Unity XR SDK의 입력 하위 시스템에 대한 설명과 활용 예제입니다. 입력 하위 시스템은 버튼, 축, 트래킹 기기 정보를 보고하기 위한 인터페이스로, Unity 엔진의 다양한 입력 기능을 관리합니다. 이 문서는 Unity 사용자 매뉴얼 2022.3을 기반으로 합니다.
주요 용어 정의
용어 | 설명 |
---|---|
기기 | 입력 기능을 위한 콘테이너입니다. 게임패드, 헤드셋 또는 손 골격 등 다양한 형태를 가질 수 있습니다. |
기능 | 센서 또는 사용자 수정을 통해 얻는 모든 데이터 기능입니다. |
용도 | 기능이 제공하는 문맥을 설명하며, 개발자가 기능을 사용하는 방식을 식별합니다. |
기기 정의 | 기기가 Unity에 보고하는 기능에 대한 설명입니다. |
기본 XR 입력 공급자 생성하기
XR 입력 공급자를 생성하려면 다음 단계를 수행합니다.
- 기기 연결 상태를 보고합니다.
- 모든 연결된 기기의 정의 정보를 입력합니다.
- Unity가 요청할 때마다 기기의 상태를 업데이트합니다.
- 관련 이벤트 및 쿼리에 응답합니다.
- 새로운 입력 시스템에 기기 레이아웃을 보고합니다.
기기 연결 및 연결 해제
기기 연결과 연결 해제를 관리하는 두 가지 API가 있습니다:
IUnityXRInputInterface.InputSubsystem_DeviceConnected
: 새로운 기기를 보고합니다.IUnityXRInputInterface.InputSubsystem_DeviceDisconnected
: 입력 기기가 더 이상 이용할 수 없음을 보고합니다.
기기 정의 세부사항
기기 정의는 기기가 Unity에 보고할 수 있는 기능을 설명합니다. 기능에는 기기 이름, 역할, 제조업체, 일련번호 등이 포함됩니다.
기기 정의에 필수 요소
필수 요소 | 설명 |
---|---|
이름 | 기기 이름을 명확하게 설정해야 하며, 제조업체 이름은 포함되지 않아야 합니다. |
특성 | 기기의 타입을 정의하는 일련의 플래그입니다. |
제조업체 | 기기 제조업체를 설정합니다. |
일련번호 | 기기별로 고유한 식별자여야 합니다. |
기능 추가 방식
기기 정의에 입력 기능을 추가하는 메서드는 다음과 같습니다:
IUnityXRInputInterface.DeviceDefinition_AddFeature
: 기능을 추가합니다.IUnityXRInputInterface.DeviceDefinition_AddCustomFeature
: 커스텀 기능을 추가합니다.
기기 상태 업데이트
기기 상태는 기기의 현재 상태를 포함하는 데이터 구조입니다. 기기 상태를 업데이트하기 위해 IUnityXRInputProvider.UpdateDeviceState
를 사용합니다.
기기 상태 메서드 예시
메서드 | 설명 |
---|---|
SetCustomValue | 커스텀 값 기능을 설정합니다. |
SetBinaryValue | 부울 기능을 설정합니다. |
SetAxis1DValue | 1D 축 값을 설정합니다. |
이벤트 처리
Unity는 이벤트에 반응하도록 기대합니다. 주요 이벤트는 다음과 같습니다:
이벤트 | 설명 |
---|---|
HandleEvent | 프라이빗 이벤트를 처리합니다. |
HandleRecenter | 트래킹 원점을 재설정합니다. |
기기 레이아웃 예제
새로운 입력 시스템을 사용하는 경우 개발자는 다음과 같은 기기 레이아웃을 제공해야 합니다.
[InputControlLayout(displayName = "Example VR Controller")]
public class ExampleVRController : XRController
{
[Preserve]
[InputControl(aliases = new[] { "PrimaryButton" })]
public ButtonControl exampleButton { get; private set; }
[Preserve]
[InputControl]
public Vector3Control examplePosition { get; private set; }
[Preserve]
[InputControl]
public QuaternionControl exampleRotation { get; private set; }
protected override void FinishSetup()
{
base.FinishSetup();
exampleButton = GetChildControl<ButtonControl>("exampleButton");
examplePosition = GetChildControl<Vector3Control>("examplePosition");
exampleRotation = GetChildControl<QuaternionControl>("exampleRotation");
}
}
레이아웃 등록
InputLayoutLoader
클래스를 사용하여 레이아웃을 등록합니다.
public override bool Initialize()
{
# if UNITY_INPUT_SYSTEM
InputLayoutLoader.RegisterInputLayouts();
# endif
}
체크리스트
자체 입력 공급자를 생성하는 경우 아래 체크리스트를 따르세요.
- 기본 라이프사이클 등록 설정
- 기기 연결 및 정의 업데이트
- 기능 추가 및 상태 업데이트
- 트래킹 경계 설정
이 문서에서는 Unity XR SDK 입력 하위 시스템의 기초부터 이벤트 처리 및 기기 레이아웃 설정까지 포괄적으로 설명했습니다. 필요 시 Unity 공식 문서를 참고하여 더 많은 정보를 얻으시기 바랍니다.