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을 해서 이벤트를 발생하고 있습니다.