게하! 개하! (게임도 하고 개발도 하고)

[Unity] XR Rig로 오큘러스 VR 컨트롤러 입력 받는 방법 본문

Unity

[Unity] XR Rig로 오큘러스 VR 컨트롤러 입력 받는 방법

Sorrel 2021. 9. 30. 17:45

1. XR Rig란?

2021.09.29 - [Unity] - [Unity] 오큘러스 퀘스트2 VR 카메라 셋팅하기 (OVRcamreaRig vs XR Rig), VR유니티 개발 초기 설정

 

[Unity] 오큘러스 퀘스트2 VR 카메라 셋팅하기 (OVRcamreaRig vs XR Rig), VR유니티 개발 초기 설정

0. 왜 이 글을 쓰게 되었나? 더보기  VR의 카메라 및 컨트롤러 set은 OVRCameraRig와 XR Rig 가 있다는 것을 알게 되었는데, 아무리 입력을 받으려 해도 되지 않았고, 두 Rig는 입력을 받는 스크립트 코드

mumumi.tistory.com

 

2. XR Interaction Toolkit과 XR Rig로 퀘스트 입력 받는 법

 

 

CommonUsages.triggerButton
CommonUsages.thumbrest
CommonUsages.primary2DAxisClick
CommonUsages.primary2DAxisTouch
CommonUsages.menuButton
CommonUsages.gripButton
CommonUsages.secondaryButton
CommonUsages.secondaryTouch
CommonUsages.primaryButton
CommonUsages.primaryTouch

이렇게 CommonUsages.(inputfeatureusages)  방식으로 입력이 감지된다. 위 사진의 feature들을 상황에 맞게 가져다 붙이면 된다.

 

 

 

3. 예시 코드

//카메라가 보는 방향으로 조이스틱을 움직이면 이동하는 코드 예시

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR;
using UnityEngine.XR.Interaction.Toolkit;

public class movement : MonoBehaviour
{

    public XRController controller = null;
    private CharacterController character;
    private GameObject _camera;

    private void Awake()
    {
        character = GetComponent<CharacterController>();
        _camera = GetComponent<XRRig>().cameraGameObject;
        
    }

    private void Update()
    {
        CommonInput();
    }

    private void CommonInput()
    {
        // Touchpad/Joystick position
        if (controller.inputDevice.TryGetFeatureValue(CommonUsages.primary2DAxis, out Vector2 position))
        {
            var inputVector = new Vector3(position.x, Physics.gravity.y, z: position.y);
            var inputDirection = transform.TransformDirection(inputVector);
            var lookDirection = new Vector3(x: 0, _camera.transform.eulerAngles.y, z: 0);
            var newDirection = Quaternion.Euler(lookDirection) * inputDirection;
            character.Move(motion: newDirection * Time.deltaTime * speed);
        }
    }

}

 

// 컨트롤러의 thumbstick의 좌우 입력을 받는 예시

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR;
using UnityEngine.XR.Interaction.Toolkit;

public class movement : MonoBehaviour
{

    public XRController controller = null;
    private CharacterController character;
    private GameObject _camera;

    private void Awake()
    {
        character = GetComponent<CharacterController>();
        _camera = GetComponent<XRRig>().cameraGameObject;
        
    }

    private void Update()
    {
        //CommonInput();
        thumb();
    }

    private void CommonInput()
    {
        // Touchpad/Joystick position
        if (controller.inputDevice.TryGetFeatureValue(CommonUsages.primary2DAxis, out Vector2 position))
        {
            var inputVector = new Vector3(position.x, Physics.gravity.y, z: position.y);
            var inputDirection = transform.TransformDirection(inputVector);
            var lookDirection = new Vector3(x: 0, _camera.transform.eulerAngles.y, z: 0);
            var newDirection = Quaternion.Euler(lookDirection) * inputDirection;
            character.Move(motion: newDirection * Time.deltaTime * speed);
        }
    }
    
    private void thumb(){
    if (controller.inputDevice.TryGetFeatureValue(CommonUsages.primary2DAxis, out Vector2 position))
            {
                if (position.x > 0) //만약 우로 당겼다면
                {
                    //코딩
                }
                else if (position.x < 0) //만약 좌로 당겼다면
                {
                    //코딩
                }
            }
    }

}

 

//Abutton을 감지하는 코드 예시

if(controller.inputDevice.TryGetFeatureValue(CommonUsages.primaryButton, out bool AButton))
        {
                if (AButton == true)
                {
                //코딩
                }
                
        }

여기에 있는 out bool Abutton의 Abutton은 변수 명이므로 이름을 바꿔도 상관 없다.

 

 

 

4. 유니티 공식 매뉴얼

https://docs.unity.cn/2019.2/Documentation/Manual/xr_input.html

 

Unity - Manual: Unity XR Input

Spatial Mapping common troubleshooting issues Input for Windows Mixed Reality Unity XR Input This section provides information on all Unity-supported input devices for virtual realityA system that immerses users in an artificial 3D world of realistic image

docs.unity.cn

 

 

--> 한국어

https://docs.unity.cn/kr/current/Manual/xr_input.html

 

Unity XR 입력 - Unity 매뉴얼

이 Unity 사용자 매뉴얼 섹션에서는 가상 현실, 증강 현실, Windows Mixed Reality 애플리케이션을 위한 모든 Unity 지원 입력 기기의 정보를 제공합니다. 이 페이지는 다음 주제를 다룹니다.

docs.unity.cn

 

 


도움이 되었다면 공감 부탁드립니다.

초보 개발자에게 큰 힘이 됩니다.

0 Comments
댓글쓰기 폼