VR 메타 퀘스트 컨트롤러 버튼 체크 및 오브젝트 이동을 위한 소스 코드

728x90

메타 퀘스트 2 컨트롤러 입력값 세팅 및 이동

메타 퀘스트 2 입력과 관련된 정보를 확인할 수 있는 사이트이다.

필요한 함수들도 있으니 사용할 때 참고하면 되겠다.

https://docs.unity3d.com/kr/2019.2/Manual/OculusControllers.html

 

오큘러스 입력 - Unity 매뉴얼

오큘러스 리프트(Oculus Rift)에는 세 개의 입력이 있습니다. 오큘러스 터치 컨트롤러 두 개와 오큘러스 리모트 한 개가 바로 그것입니다. Unity 에디터의 네이티브 오큘러스 리프트 입력 하드웨어

docs.unity3d.com

https://developer.oculus.com/documentation/unity/unity-ovrinput/

 

Map Controllers | Oculus Developers

 

developer.oculus.com

 

Combine 방식에 의한 왼손/오른손 트리거 버튼

  • 장점 : 한 손만 인식 했을 때는 한 손 트리거로 인식된다.
  • 단점 : 왼손/오른손을 구별해야하는 상황에서 문제가 생길 수 있다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using OVR;

public class control01 : MonoBehaviour
{ 
    //Combine방식
    void Update()
    {
        //PrimaryIndexTrigger 왼손 트리거 버튼
        if(OVRInput.GetDown(OVRInput.Button.PrimaryIndexTrigger))
        {
            Debug.Log("왼손 트리거 버튼 클릭");
        }
        //SecondaryIndexTrigger 오른손 트리거 버튼
        if (OVRInput.GetDown(OVRInput.Button.SecondaryIndexTrigger))
        {
            Debug.Log("오른손 트리거 버튼 클릭");
        }
    }
}

 

Individual 방식에 의한 왼손/오른손 트리거 버튼

왼손/오른손을 철저히 구별한다. 총을 쏠 때/선택할 때 많이 사용한다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using OVR;

public class Control02 : MonoBehaviour
{
    //Individual 방식
    void Update()
    {
        // PrimaryIndexTrigger 왼손 트리거 버튼
        if (OVRInput.GetDown(OVRInput.Button.PrimaryIndexTrigger, OVRInput.Controller.LTouch))
        {
            Debug.Log("왼손 트리거 버튼 클릭");
        }
        // SecondaryIndexTrigger 오른손 트리거 버튼
        if (OVRInput.GetDown(OVRInput.Button.PrimaryIndexTrigger, OVRInput.Controller.RTouch))
        {
            Debug.Log("오른손 트리거 버튼 클릭");
        }
    }

 

Individual 방식에 의한 왼손/오른손 Grip 버튼

물건을 잡거나 던지거나 할 때 많이 사용된다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using OVR;

public class Grip : MonoBehaviour
{
    void Update()
    {
        if (OVRInput.GetDown(OVRInput.Button.PrimaryHandTrigger, OVRInput.Controller.LTouch))
        {
            Debug.Log(" 왼쪽 Grip Button Down");
        }
        if (OVRInput.GetUp(OVRInput.Button.PrimaryHandTrigger, OVRInput.Controller.RTouch))
        {
            Debug.Log(" 오른쪽 Grip Button Up");
        }
    }
}

 

메타 퀘스트 2 컨트롤러를 이용한 이동

CharacherController와 Thumbstick을 이용하여 컨트롤을 할 수 있다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using OVR;

public class control : MonoBehaviour
{
    float MovSpeed = 10f;
    CharacterController cc;
    void Start()
    {
        cc = GetComponent<CharacterController>();
    }
    void Update()
    {
        Vector2 mov2d = OVRInput.Get(OVRInput.Axis2D.PrimaryThumbstick);
        Vector3 mov = new Vector3(mov2d.x * Time.deltaTime * MovSpeed, 0f, mov2d.y * Time.deltaTime * MovSpeed);
        cc.Move(mov);
    }
}

해당 스크립트를 Cube에 적용하고 CharacterController 컴포넌트를 추가해주면 Thumstick을 이용한 Cube의 이동기능이 가능하다. 만약 1인칭 시점에서 이동하고 싶다면 빈 오브젝트(Create Empty)를 생성하고 CharacterController 및 스크립트 연결 후 OVRCameraRig를 자식화해주면 된다.

728x90