Add VRInputController
VRInputController - Object can handle VRInput by inheritting VRInputController class - Provide virtual method - OnGripTriggerButtonDown - OnIndexTriggerButtonDown - These method automatically called GunController - Refactoring: Hard link with VRInput removed - Inherit VRInputController Camera - Fix: decrease near plane distance
Showing
6 changed files
with
108 additions
and
56 deletions
... | @@ -337,6 +337,11 @@ Prefab: | ... | @@ -337,6 +337,11 @@ Prefab: |
337 | propertyPath: m_RootOrder | 337 | propertyPath: m_RootOrder |
338 | value: 3 | 338 | value: 3 |
339 | objectReference: {fileID: 0} | 339 | objectReference: {fileID: 0} |
340 | + - target: {fileID: 20442921188006278, guid: b669759df7f1742f6b6a749f45824763, | ||
341 | + type: 2} | ||
342 | + propertyPath: near clip plane | ||
343 | + value: 0.01 | ||
344 | + objectReference: {fileID: 0} | ||
340 | m_RemovedComponents: [] | 345 | m_RemovedComponents: [] |
341 | m_ParentPrefab: {fileID: 100100000, guid: b669759df7f1742f6b6a749f45824763, type: 2} | 346 | m_ParentPrefab: {fileID: 100100000, guid: b669759df7f1742f6b6a749f45824763, type: 2} |
342 | m_IsPrefabParent: 0 | 347 | m_IsPrefabParent: 0 | ... | ... |
... | @@ -6,7 +6,7 @@ Material: | ... | @@ -6,7 +6,7 @@ Material: |
6 | m_ObjectHideFlags: 0 | 6 | m_ObjectHideFlags: 0 |
7 | m_PrefabParentObject: {fileID: 0} | 7 | m_PrefabParentObject: {fileID: 0} |
8 | m_PrefabInternal: {fileID: 0} | 8 | m_PrefabInternal: {fileID: 0} |
9 | - m_Name: Red | 9 | + m_Name: RED |
10 | m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} | 10 | m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} |
11 | m_ShaderKeywords: | 11 | m_ShaderKeywords: |
12 | m_LightmapFlags: 4 | 12 | m_LightmapFlags: 4 | ... | ... |
... | @@ -3,69 +3,20 @@ using System.Collections.Generic; | ... | @@ -3,69 +3,20 @@ using System.Collections.Generic; |
3 | using UnityEngine; | 3 | using UnityEngine; |
4 | 4 | ||
5 | // VR 컨트롤러의 인풋을 받아 Gun 을 제어하는 스크립트 | 5 | // VR 컨트롤러의 인풋을 받아 Gun 을 제어하는 스크립트 |
6 | -// 범용적으로 사용가능하므로 적절히 수정해서 쓰면 된다. | 6 | +public class GunController : VRInputController { |
7 | -public class GunController : MonoBehaviour { | ||
8 | 7 | ||
9 | - /* | 8 | + /* VR 입력을 받아 처리해야 하는 클래스는 VRInputController 만 상속받아서 두 함수만 오버라이드 하면 된다! */ |
10 | - 유니티는 OpenVR API 를 내장하고 있다. | 9 | + // 단 두개의 함수 OnGripTriggerButtonDown 와 OnIndexTriggerButtonDown |
11 | - 이것으로 VR 입력을 InputManager 에서 조이스틱 입력으로서 받을 수 있다. | ||
12 | 10 | ||
13 | - 1. VR 인풋 테이블 참고하기. | ||
14 | - | ||
15 | - VR 인풋 테이블을 참고하기 위해 링크로 이동한다. (https://docs.unity3d.com/Manual/OpenVRControllers.html) InputManager 에서 어떤 조이스틱 입력 번호가 VR 컨트롤러의 버튼에 대응된느지 체크할 수 있다. | ||
16 | - | ||
17 | - 2. InputManager 에서 VR 용 입력 설정을 만든다. | ||
18 | - Project Settings > InputManager 로 이동한다. | ||
19 | - | ||
20 | - (미리 만들어진 InputManager 값들을 확인 가능하다.) | ||
21 | - | ||
22 | - 이름은 마음대로 지정가능하다. 이 예제의 경우 HTC Vive 컨트롤러의 왼쪽 검지 방아쇠(트리거) 버튼과 Oculus Rift 터치 컨트롤러의 왼쪽 검지 방아쇠(트리거) 버튼에 연동되는 입력 세팅 이름을 "LeftIndexTrigger" 로 지었다. | ||
23 | - | ||
24 | - 인풋 테이블에서 Vive 왼손 검지 방아쇠와 Ocluls Rift 왼손 검지 방아쇠는 Joystick 9 th Axis 로 표시되어있다. | ||
25 | - | ||
26 | - 따라서 LeftIndexTrigger 에 대응되는 조이스틱 Axis 는 9 th Axis 로 지정되어 있다. | ||
27 | - | ||
28 | - 위의 내용은 미리 세팅된 값에서 확인 가능하다. | ||
29 | - | ||
30 | - 2. 일반 게임에서 사용하듯이 Input.GetAxis 를 사용하면 된다. | ||
31 | - | ||
32 | - 0.1f(10%) 이상 트리거가 눌려질시 해당 버튼을 누른것으로 보았다. | ||
33 | - | ||
34 | - GetAxis 는 입력값을 부드럽게 꺾어준다. 별 상관은 없지만 입력을 즉시 받기 위해, 보간이 없는 GetAxisRaw 를 사용했다. | ||
35 | - | ||
36 | - */ | ||
37 | - | ||
38 | - | ||
39 | - // 검지 손가락 트리거에 대응되는 입력 세팅 이름 | ||
40 | - public string indexTriggerName; | ||
41 | - // 쥐는 트리거에 대응되는 입력 세팅 이름 | ||
42 | - public string gripTriggerName; | ||
43 | - | ||
44 | - // 제어할 총 | ||
45 | - // 여기 Gun 를 원하는 타입으로 교체하면 다른 게임에 적용 가능 | ||
46 | public Gun gun; | 11 | public Gun gun; |
47 | 12 | ||
48 | - // 입력 체크.. | 13 | + public override void OnIndexTriggerButtonDown() |
49 | - void Update() | ||
50 | { | 14 | { |
51 | - // indexTriggerName - 검지용 트리거를 누른 순간 | ||
52 | - if(Input.GetAxisRaw(indexTriggerName) >= 0.1f) | ||
53 | - { | ||
54 | - // 여기 내용을 원하는 처리로 교체하면 다른 게임에 적용 가능 | ||
55 | - | ||
56 | - // 총을 쏜다. | ||
57 | gun.Fire(); | 15 | gun.Fire(); |
58 | - Debug.Log("방아쇠를 누름"); | ||
59 | } | 16 | } |
60 | 17 | ||
61 | - // gripTriggerName - 쥐는 트리거를 누른 순간 | 18 | + public override void OnGripTriggerButtonDown() |
62 | - if(Input.GetAxisRaw(gripTriggerName) >= 0.1f) | ||
63 | { | 19 | { |
64 | - // 여기 내용을 원하는 처리로 교체하면 다른 게임에 적용 가능 | ||
65 | - | ||
66 | - // 총을 재장전 한다. | ||
67 | gun.Reload(); | 20 | gun.Reload(); |
68 | - Debug.Log("사이드 방아쇠를 누름"); | ||
69 | - } | ||
70 | } | 21 | } |
71 | } | 22 | } | ... | ... |
Assets/Scripts/VRInputController.cs
0 → 100644
1 | +using System.Collections; | ||
2 | +using System.Collections.Generic; | ||
3 | +using UnityEngine; | ||
4 | + | ||
5 | +// VR 컨트롤러의 인풋을 받아, 해당 함수를 발동하는 스크립트 | ||
6 | +// VR 컨트롤러에 대응해야 하는 클래스는, 이 스크립트를 상속받아서 | ||
7 | +// 단 두개의 함수 OnGripTriggerButtonDown 와 OnIndexTriggerButtonDown 만 오버라이드 하면 된다. | ||
8 | +public class VRInputController : MonoBehaviour { | ||
9 | + | ||
10 | + /* | ||
11 | + 유니티는 OpenVR API 를 내장하고 있다. | ||
12 | + 이것으로 VR 입력을 InputManager 에서 조이스틱 입력으로서 받을 수 있다. | ||
13 | + | ||
14 | + 1. VR 인풋 테이블 참고하기. | ||
15 | + | ||
16 | + VR 인풋 테이블을 참고하기 위해 링크로 이동한다. (https://docs.unity3d.com/Manual/OpenVRControllers.html) InputManager 에서 어떤 조이스틱 입력 번호가 VR 컨트롤러의 버튼에 대응된느지 체크할 수 있다. | ||
17 | + | ||
18 | + 2. InputManager 에서 VR 용 입력 설정을 만든다. | ||
19 | + Project Settings > InputManager 로 이동한다. | ||
20 | + | ||
21 | + (미리 만들어진 InputManager 값들을 확인 가능하다.) | ||
22 | + | ||
23 | + 이름은 마음대로 지정가능하다. 이 예제의 경우 HTC Vive 컨트롤러의 왼쪽 검지 방아쇠(트리거) 버튼과 Oculus Rift 터치 컨트롤러의 왼쪽 검지 방아쇠(트리거) 버튼에 연동되는 입력 세팅 이름을 "LeftIndexTrigger" 로 지었다. | ||
24 | + | ||
25 | + 인풋 테이블에서 Vive 왼손 검지 방아쇠와 Ocluls Rift 왼손 검지 방아쇠는 Joystick 9 th Axis 로 표시되어있다. | ||
26 | + | ||
27 | + 따라서 LeftIndexTrigger 에 대응되는 조이스틱 Axis 는 9 th Axis 로 지정되어 있다. | ||
28 | + | ||
29 | + 위의 내용은 미리 세팅된 값에서 확인 가능하다. | ||
30 | + | ||
31 | + 2. 일반 게임에서 사용하듯이 Input.GetAxis 를 사용하면 된다. | ||
32 | + | ||
33 | + 0.1f(10%) 이상 트리거가 눌려질시 해당 버튼을 누른것으로 보았다. | ||
34 | + | ||
35 | + GetAxis 는 입력값을 부드럽게 꺾어준다. 별 상관은 없지만 입력을 즉시 받기 위해, 보간이 없는 GetAxisRaw 를 사용했다. | ||
36 | + | ||
37 | + */ | ||
38 | + | ||
39 | + | ||
40 | + // 검지 손가락 트리거에 대응되는 입력 세팅 이름 | ||
41 | + public string indexTriggerName; | ||
42 | + // 쥐는 트리거에 대응되는 입력 세팅 이름 | ||
43 | + public string gripTriggerName; | ||
44 | + | ||
45 | + | ||
46 | + // 입력 체크.. | ||
47 | + void Update() | ||
48 | + { | ||
49 | + // indexTriggerName - 검지용 트리거를 누른 순간 | ||
50 | + if(Input.GetAxisRaw(indexTriggerName) >= 0.1f) | ||
51 | + { | ||
52 | + // 여기 내용을 원하는 처리로 교체하면 다른 게임에 적용 가능 | ||
53 | + | ||
54 | + // 검지손가락 트리거용 함수 발동 | ||
55 | + OnIndexTriggerButtonDown(); | ||
56 | + Debug.Log("방아쇠를 누름"); | ||
57 | + } | ||
58 | + | ||
59 | + // gripTriggerName - 쥐는 트리거를 누른 순간 | ||
60 | + if(Input.GetAxisRaw(gripTriggerName) >= 0.1f) | ||
61 | + { | ||
62 | + // 여기 내용을 원하는 처리로 교체하면 다른 게임에 적용 가능 | ||
63 | + | ||
64 | + // 쥐는 트리거용 함수 발동 | ||
65 | + OnGripTriggerButtonDown(); | ||
66 | + Debug.Log("사이드 방아쇠를 누름"); | ||
67 | + } | ||
68 | + } | ||
69 | + | ||
70 | + // 검지 트리거 버튼을 눌렀을때 발동될 함수 입니다. | ||
71 | + // 이것을 상속받아 오버라이드 하세요. | ||
72 | + public virtual void OnIndexTriggerButtonDown() | ||
73 | + { | ||
74 | + | ||
75 | + } | ||
76 | + | ||
77 | + // 쥐는 트리거 버튼을 눌렀을때 발동될 함수 입니다. | ||
78 | + // 이것을 상속받아 오버라이드 하세요. | ||
79 | + public virtual void OnGripTriggerButtonDown() | ||
80 | + { | ||
81 | + | ||
82 | + } | ||
83 | +} |
Assets/Scripts/VRInputController.cs.meta
0 → 100644
1 | +fileFormatVersion: 2 | ||
2 | +guid: 715fd8d3512a648df89f6adeca0aa407 | ||
3 | +timeCreated: 1512113025 | ||
4 | +licenseType: Pro | ||
5 | +MonoImporter: | ||
6 | + externalObjects: {} | ||
7 | + serializedVersion: 2 | ||
8 | + defaultReferences: [] | ||
9 | + executionOrder: 0 | ||
10 | + icon: {instanceID: 0} | ||
11 | + userData: | ||
12 | + assetBundleName: | ||
13 | + assetBundleVariant: |
-
Please register or login to post a comment