알맹이방
[Unity] XR Rig로 오큘러스 VR 컨트롤러 입력 받는 방법 본문
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
도움이 되었다면 공감 부탁드립니다.
초보 개발자에게 큰 힘이 됩니다.