I_Jemin

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
...@@ -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 }
......
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 +}
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:
1 -m_EditorVersion: 2017.2.0f3 1 +m_EditorVersion: 2017.2.0p3
......