Dev/Unity
[Unity] Oculus 컨트롤러 키 입력 받기
RaCoCeTTe
2024. 2. 27. 15:59
Oculus 프로젝트 도중
각 버튼에 대한 기능을 구현해야할 상황이 생겼는데
알아보니 엄청 간단!!
OVRInput 클래스를 사용하여 입력을 받으면 되는데
해당 클래스 사용법을 알기 이전에
이미지의 각 버튼 값들이 OVR 패키지에 상수로 선언이 되어있습니다..
1. OVRInput.Get();
//매핑한 키의 현재 상태값을 가져온다. 누른상태면 True, 안누른상태면 False
OVRInput.Get();
//예시
OVRInput.Get(RawButton.Y);
2.OVRInput.GetDown();
//현재 프레임에서 매핑한 키가 눌렀는지를 확인한다. Return은 Bool 값으로 날라온다.
OVRInput.GetDown();
//예시
if(OVRInput.GetDown(RawButton.Y)) {}
3.OVRInput.GetUp();
//현재 프레임에서 매핑한 키가 눌렀다 손을 땐 상태인지 확인한다. Return은 Bool 값으로 날라온다.
OVRInput.GetUp();
//예시
if(OVRInput.GetUp(RawButton.Y)) {}
해당 함수들을 통해 키 입력에 대한 이벤트를 발생시 킬 수 있습니다.
저 같은 경우는 싱글톤으로 해당 컨트롤러의 키들이 입력되었을때 이벤트를 발생시키는 클래스를 생성했습니다.
OVRControl.cs
using UnityEngine.Events;
using VRTS.Protocol;
using static OVRInput;
public class OVRControl : Singleton<OVRControl>
{
public UnityEvent<RawButton> OnClickA = new UnityEvent<RawButton>();
public UnityEvent<RawButton> OnClickB = new UnityEvent<RawButton>();
public UnityEvent<RawButton> OnClickY = new UnityEvent<RawButton>();
public UnityEvent<RawButton> OnClickX = new UnityEvent<RawButton>();
public UnityEvent<RawButton> OnClickStart = new UnityEvent<RawButton>();
public UnityEvent<RawButton> OnClickAnyway = new UnityEvent<RawButton>();
void Update()
{
KeyDown(RawButton.A, ref OnClickA);
KeyDown(RawButton.X, ref OnClickX);
KeyDown(RawButton.B, ref OnClickB);
KeyDown(RawButton.Y, ref OnClickY);
KeyDown(RawButton.Start, ref OnClickStart);
}
void KeyDown(RawButton rawButton, ref UnityEvent<RawButton> call)
{
if (GetUp(rawButton))
{
call.Invoke(rawButton);
OnClickAnyway.Invoke(rawButton);
}
}
}
해당 클래스를 싱글톤으로 생성하고
해당 키의 이벤트가 필요한 컴포넌트에서 UnityEvent에 Listen을 해서 이벤트를 발생하고 있습니다.