VRInput.cs
2.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR;
// VR 컨트롤러의 입력을 GetVRTriggerButton 과 GetVRGripButton 로 제공하는 클래스
public static class VRInput {
public enum Hand {Left,Right};
/*
유니티는 OpenVR API 를 내장하고 있다.
이것으로 VR 입력을 InputManager 에서 조이스틱 입력으로서 받을 수 있다.
1. VR 인풋 테이블 참고하기.
VR 인풋 테이블을 참고하기 위해 링크로 이동한다. (https://docs.unity3d.com/Manual/OpenVRControllers.html) InputManager 에서 어떤 조이스틱 입력 번호가 VR 컨트롤러의 버튼에 대응된느지 체크할 수 있다.
2. InputManager 에서 VR 용 입력 설정을 만든다.
Project Settings > InputManager 로 이동한다.
(미리 만들어진 InputManager 값들을 확인 가능하다.)
이름은 마음대로 지정가능하다. 이 예제의 경우 HTC Vive 컨트롤러의 왼쪽 검지 방아쇠(트리거) 버튼과 Oculus Rift 터치 컨트롤러의 왼쪽 검지 방아쇠(트리거) 버튼에 연동되는 입력 세팅 이름을 "LeftIndexTrigger" 로 지었다.
인풋 테이블에서 Vive 왼손 검지 방아쇠와 Ocluls Rift 왼손 검지 방아쇠는 Joystick 9 th Axis 로 표시되어있다.
따라서 LeftIndexTrigger 에 대응되는 조이스틱 Axis 는 9 th Axis 로 지정되어 있다.
위의 내용은 미리 세팅된 값에서 확인 가능하다.
2. 일반 게임에서 사용하듯이 Input.GetAxis 를 사용하면 된다.
0.1f(10%) 이상 트리거가 눌려질시 해당 버튼을 누른것으로 보았다.
GetAxis 는 입력값을 부드럽게 꺾어준다. 별 상관은 없지만 입력을 즉시 받기 위해, 보간이 없는 GetAxisRaw 를 사용했다.
*/
//왼손
// 검지 손가락 트리거에 대응되는 입력 세팅 이름
static string leftIndexTriggerName = "LeftIndexTrigger";
// 쥐는 트리거에 대응되는 입력 세팅 이름
static string leftGripTriggerName = "LeftGripTrigger";
// 오른손
// 검지 손가락 트리거에 대응되는 입력 세팅 이름
static string rightIndexTriggerName = "RightIndexTrigger";
// 쥐는 트리거에 대응되는 입력 세팅 이름
static string rightGripTriggerName = "RightGripTrigger";
// 편의를 위해 정적 함수로 입력을 제공
public static bool GetTriggerButton(Hand hand)
{
if(hand == Hand.Right)
{
if(Input.GetAxisRaw(rightIndexTriggerName) >= 0.1f)
{
return true;
}
}
else if(hand == Hand.Left)
{
if(Input.GetAxisRaw(leftIndexTriggerName) >= 0.1f)
{
return true;
}
}
return false;
}
public static bool GetGripButton(Hand hand)
{
if(hand == Hand.Right)
{
if(Input.GetAxisRaw(rightGripTriggerName) >= 0.1f)
{
return true;
}
}
else if(hand == Hand.Left)
{
if(Input.GetAxisRaw(leftGripTriggerName) >= 0.1f)
{
return true;
}
}
return false;
}
//TODO GetTriggerDown 과 GetTriggerUp 만들기
}