Unity 2022.3 & Oculus Integration URP 03 (Tutorial - Receive Basic Input from Controller)

VR/Oculus Integration 2023. 9. 20. 17:45
반응형

목표 

Unity 프로젝트에 OVRCameraRig를 추가
컨트롤러의 인덱스와 핸드 트리거를 통해 사용자 입력 받기 
사용자가 컨트롤러의 썸스틱(왼쪽 또는 오른쪽)을 누를 때 입력 받기 
사용자가 A 버튼을 놓으면 햅틱 피드백을 제공
컨트롤러(6DOF)의 위치 및 회전 정보를 수신

 

씬을 하나 만들고 

 

MainCamera를 지우고 OVRCameraRig 프리팹을 찾아서 하이어라키에 놓는다 

 

컨트롤러 입력 매핑

다음 다이어그램은 Meta Quest Touch 컨트롤러(Meta Quest 2)에 대한 일반적인 입력 매핑을 보여준다

일반적인 맵핑

 

컨트롤러를 직접 노출하는 원시 맵은 다음과 같다

원시맵

 

참고: Secondary 오른쪽이고 Primary왼쪽 컨트롤러다 

 

이들은 모두 Meta Quest 컨트롤러 및 게임 패드에 대한 통합 입력 시스템을 제공하는 OVRInput 클래스에서 사용할 수 있다.

자세한 내용은 OVRInput 클래스 참조를 참조하자

 


MyController 스크립트를 생성하고 다음과 같이 작성 한다 

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

public class MyController : MonoBehaviour
{
    public Camera sceneCamera; //sceneCamera는 장면이 사용하는 카메라를 나타냅니다.
    private Vector3 targetPosition; //targetPosition은 카메라의 위치를 나타냅니다.
    private Quaternion targetRotation;  //targetRotation은 카메라의 회전을 나타냅니다.
    private float step; // 단계는 Cube GameObject 애니메이션에 도움이 됩니다.

    void Start()
    {
        //처음에는 큐브 GameObject가 사용자 앞 3미터 거리에 배치됩니다.
        transform.position = sceneCamera.transform.position + sceneCamera.transform.forward * 3.0f;
    }
    
    void Update()
    {
        step = 5.0f * Time.deltaTime;

        //Receive input from right index trigger
        if (OVRInput.Get(OVRInput.RawButton.RIndexTrigger))
            CenterCube();
        
        //Receive input from right index thumbstick
        if (OVRInput.Get(OVRInput.RawButton.RThumbstickLeft)) 
            transform.Rotate(0, 5.0f * step, 0);
        
        if (OVRInput.Get(OVRInput.RawButton.RThumbstickRight)) 
            transform.Rotate(0, -5.0f * step, 0);
        
        //Receive input from A button and add haptic feedback
        if (OVRInput.GetUp(OVRInput.Button.One))
        {
            OVRInput.SetControllerVibration(1, 1, OVRInput.Controller.RTouch);
        }
        
        //Receive input from left hand trigger
        if (OVRInput.Get(OVRInput.Axis1D.PrimaryHandTrigger) > 0.0f)
        {
            transform.position = OVRInput.GetLocalControllerPosition(OVRInput.Controller.LTouch);
            transform.rotation = OVRInput.GetLocalControllerRotation(OVRInput.Controller.LTouch);
        }
    }
    
    
    //큐브를 원활하게 배치하고 회전시키는 도우미 기능 만들기
    void CenterCube()
    {
        targetPosition = sceneCamera.transform.position + sceneCamera.transform.forward * 3.0f;
        targetRotation = Quaternion.LookRotation(transform.position - sceneCamera.transform.position);

        transform.position = Vector3.Lerp(transform.position, targetPosition, step);
        transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, step);
    }
}

 

 

큐브를 하나 만들고 스크립트를 부착 한다 


빌드후 실행해 본다 

 

 

 

 

 

 

 

 


 

참고 : https://developer.oculus.com/documentation/unity/unity-tutorial-basic-controller-input/

반응형
: