Unity에서 Oculus Integration을 사용하지 않고 Oculus Touch 및 HMD 매개변수를 가져오는 방법(for Oculus Quest)

먼저


Oculus Quest 응용 프로그램의 개발에서 나는 Oculus 통합을 사용하는 것이 정확한 방법이라고 생각했지만 소수의 방법으로는 표면에 나타나지 않았다고 생각해서 먼저 적어 두었다.장점은 일반적인 Unity 응용 프로그램과 같은 피부 감각으로 입력계를 설치하여 처리할 수 있으며, Unity 버전이 업그레이드될 때 자산 측의 업데이트를 기다리지 않아도 된다는 것이다.단점은 라이브러리와 관련된 부분 처리를 자체적으로 실시해야 한다는 것입니다. 예를 들어Grab, Move, uGui 입력 처리입니다.
환경 구축에 관해서는 선인들의 지혜를 참고하세요.
Unity+Oculus Quest 개발 노트 - 프레임워크 합성
Unity에서 개발한 어플리케이션을 Oculus Quest에 추가하는 방법(Mac/Win) - Qiita

개발 환경


Unity 2019.1.5f1 Personal

InputManager에서 Oculus Touch 입력 설정


참조: OpenVR 컨트롤러 입력Edit>Project Settings>Input부터 설정합니다.샘플에 관해서는 아래의 캡처를 진행하세요.








InputManager를 설정한 후 다음 스크립트를 GameObject에 부착하여 입력 값을 확인할 수 있습니다.
TouchChecker.cs
using UnityEngine;

public class TouchChecker : MonoBehaviour
{
    void Update()
    {
        if(Input.GetAxis("Horizontal") != 0){
            Debug.Log("Horizontal:" + Input.GetAxis("Horizontal"));
        }

        if(Input.GetAxis("Horizontal2") != 0){
            Debug.Log("Horizontal2:" + Input.GetAxis("Horizontal2"));
        }

        if(Input.GetAxis("Vertical") != 0){
            Debug.Log("Vertical:" + Input.GetAxis("Vertical"));
        }

        if(Input.GetAxis("Vertical2") != 0){
            Debug.Log("Vertical2:" + Input.GetAxis("Vertical2"));
        }

        if(Input.GetButtonDown("VR_Left_Button1")){
            Debug.Log("l1");
        }

        if(Input.GetButtonDown("VR_Left_Button2")){
            Debug.Log("l2");
        }

        if(Input.GetButtonDown("VR_Right_Button1")){
            Debug.Log("r1");
        }

        if(Input.GetButtonDown("VR_Right_Button2")){
            Debug.Log("r2");
        }

        if(Input.GetButtonDown("VR_Left_Start")){
            Debug.Log("lStart");
        }

        if(Input.GetButtonDown("VR_Left_Button8")){
            Debug.Log("l push");
        }

        if(Input.GetButtonDown("VR_Right_Button9")){
            Debug.Log("r push");
        }

        if(Input.GetAxis("VR_Left_Index") > 0){
            Debug.Log("VR_Left_Index:" + Input.GetAxis("VR_Left_Index"));
        }

        if(Input.GetAxis("VR_Left_Hand") > 0){
           Debug.Log("VR_Left_Hand:" + Input.GetAxis("VR_Left_Hand"));
        }

        if(Input.GetAxis("VR_Right_Index") > 0){
           Debug.Log("VR_Right_Index:" + Input.GetAxis("VR_Right_Index"));
        }

        if(Input.GetAxis("VR_Right_Hand") > 0){
           Debug.Log("VR_Right_Hand:" + Input.GetAxis("VR_Right_Hand"));
        }
    }
}

추적 위치 가져오기


주관적이지만 RoomScale보다 Stationary가 개발되기 쉽습니다.
RoomScale을 전제로 하는 응용 프로그램도 Stationary로 제작되었습니다.어둡다.
다음 스크립트를 GameObject에 부착하여 추적 위치를 확인할 수 있습니다.
TrackingSample.cs
using UnityEngine;
using UnityEngine.XR;

public class TrackingSample : MonoBehaviour
{
    void Start()
    {
        XRDevice.SetTrackingSpaceType(TrackingSpaceType.Stationary);
        ////RoomScaleの場合
        // XRDevice.SetTrackingSpaceType(TrackingSpaceType.RoomScale);
    }

    void Update()
    {
        Debug.Log("LeftHand_Position : " + InputTracking.GetLocalPosition(XRNode.LeftHand));
        Debug.Log("RightHand_Position : " + InputTracking.GetLocalPosition(XRNode.RightHand));
        Debug.Log("HMD_Position : " + InputTracking.GetLocalPosition(XRNode.CenterEye));
        Debug.Log("LeftHand_Rotation : " + InputTracking.GetLocalRotation(XRNode.LeftHand));
        Debug.Log("RightHand_Rotation : " + InputTracking.GetLocalRotation(XRNode.RightHand));
        Debug.Log("HMD_Rotation : " + InputTracking.GetLocalRotation(XRNode.CenterEye));
    }
}

카메라 정보



나는 하늘의 게임 오브젝트와의 친자 관계로 부모님을 움직이는 오브젝트가 가장 좋다고 생각한다.

Oculus Quest에서 사용할 수 없는 기능

InputTracking.Recenter();→OculusButton의 긴 누름은 대체할 수 있기 때문에 그렇게 중요하지 않다.Button.Start(Unity Button ID:7) → Oculus Quest에서 반응이 없습니다.Oculus Rift도 사용할 수 없습니다.

마지막


Oculus Integration에 의존하고 싶지 않은 사람들이 모두 자신의 힘으로 이루고 싶은 상황에 대해 나는 이 방법이 유용하다고 생각한다.Oculus Rift를 위해 만든 응용 프로그램의 경우 스테레오 경로에서 구축 목표를 변경하면 쉽게 실행할 수 있습니다.공연은 당연히 미묘하다.

참조 링크


XR-Unity 브로셔
1022 레이저 컨트롤러 yumemi-inc/vr-studies Wiki
Unity 표준 VR 기능(UnityEngine.XR) 주석 - 프레임 작성

좋은 웹페이지 즐겨찾기