알맹이방
[Unity] XR Rig로 오큘러스 VR 컨트롤러 입력 받는 방법 본문
1. XR Rig란?
2021.09.29 - [Unity] - [Unity] 오큘러스 퀘스트2 VR 카메라 셋팅하기 (OVRcamreaRig vs XR Rig), VR유니티 개발 초기 설정
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
--> 한국어
https://docs.unity.cn/kr/current/Manual/xr_input.html
도움이 되었다면 공감 부탁드립니다.
초보 개발자에게 큰 힘이 됩니다.
'Unity' 카테고리의 다른 글
Comments