2
2
using UnityEngine ;
3
3
4
4
namespace Assets . Common . Cameras . Scripts {
5
+
5
6
[ AddComponentMenu ( "Scripts/Cameras/GroundCam" ) ]
6
7
public class GroundCam : MonoBehaviour {
7
- private Transform _mChildCameraTransform ;
8
- private Vector2 _mInput ;
9
- private bool _mIsMoving ;
10
- private Vector3 _mMoveDir = Vector3 . zero ;
11
8
public float MBoostSpeed = 10f ;
12
9
public float MMoveSpeed = 1f ;
13
10
14
11
[ SerializeField ]
15
12
public MouseLook MouseLook ;
16
13
17
- // Use this for initialization
18
- private void Start ( ) {
19
- _mChildCameraTransform = transform . GetChild ( 0 ) ;
20
- MouseLook . Init ( transform , _mChildCameraTransform ) ;
21
- }
14
+ private Transform childCameraTransform ;
15
+ private Vector2 input ;
16
+ private Vector3 moveDir = Vector3 . zero ;
22
17
23
18
private void FixedUpdate ( ) {
24
19
float speed ;
25
20
GetInput ( out speed ) ;
26
21
27
22
// always move along the camera forward as it is the direction that it being aimed at
28
- Vector3 desiredMove = transform . forward * _mInput . y + transform . right * _mInput . x ;
23
+ Vector3 desiredMove = ( transform . forward * input . y ) + ( transform . right * input . x ) ;
29
24
30
25
// get a normal for the surface that is being touched to move along it
31
- _mMoveDir . x = desiredMove . x * speed ;
32
- _mMoveDir . z = desiredMove . z * speed ;
26
+ moveDir . x = desiredMove . x * speed ;
27
+ moveDir . z = desiredMove . z * speed ;
33
28
34
29
Vector3 pos = transform . position ;
35
- pos . x += _mMoveDir . x ;
36
- pos . z += _mMoveDir . z ;
30
+ pos . x += moveDir . x ;
31
+ pos . z += moveDir . z ;
37
32
transform . position = pos ;
38
33
MouseLook . UpdateCursorLock ( ) ;
39
34
RotateView ( ) ;
40
35
}
41
36
42
- private void RotateView ( ) {
43
- MouseLook . LookRotation ( transform , _mChildCameraTransform ) ;
44
- }
45
-
46
37
private void GetInput ( out float speed ) {
47
38
// Read input
48
39
float horizontal = Input . GetAxis ( "Horizontal" ) ;
49
40
float vertical = Input . GetAxis ( "Vertical" ) ;
50
41
51
42
speed = Input . GetKey ( KeyCode . LeftShift ) ? MBoostSpeed : MMoveSpeed ;
52
- _mInput = new Vector2 ( horizontal , vertical ) ;
43
+ input = new Vector2 ( horizontal , vertical ) ;
44
+
45
+ if ( input . sqrMagnitude > 1 ) {
46
+ input . Normalize ( ) ;
47
+ }
48
+ }
53
49
54
- if ( _mInput . sqrMagnitude > 1 ) _mInput . Normalize ( ) ;
50
+ private void RotateView ( ) {
51
+ MouseLook . LookRotation ( transform , childCameraTransform ) ;
52
+ }
53
+
54
+ // Use this for initialization
55
+ private void Start ( ) {
56
+ childCameraTransform = transform . GetChild ( 0 ) ;
57
+ MouseLook . Init ( transform , childCameraTransform ) ;
55
58
}
56
59
}
57
60
58
61
[ Serializable ]
59
62
public class MouseLook {
60
- private bool _mCursorIsLocked = true ;
61
63
public bool ClampVerticalRotation = true ;
62
64
public bool LockCursor = true ;
63
- private Quaternion m_CameraTargetRot ;
64
-
65
- private Quaternion m_CharacterTargetRot ;
66
65
public float MaximumX = 90F ;
67
66
public float MinimumX = - 90F ;
68
67
public bool Smooth ;
69
68
public float SmoothTime = 5f ;
70
69
public float XSensitivity = 2f ;
71
70
public float YSensitivity = 2f ;
71
+ private Quaternion cameraTargetRot ;
72
+
73
+ private Quaternion characterTargetRot ;
74
+ private bool cursorIsLocked = true ;
72
75
73
76
public void Init ( Transform character , Transform camera ) {
74
- m_CharacterTargetRot = character . localRotation ;
75
- m_CameraTargetRot = camera . localRotation ;
77
+ characterTargetRot = character . localRotation ;
78
+ cameraTargetRot = camera . localRotation ;
76
79
}
77
80
78
-
79
81
public void LookRotation ( Transform character , Transform camera , float yRotOptional = 0f ) {
80
82
float yRot = Input . GetAxis ( "Mouse X" ) * XSensitivity ;
81
83
float xRot = Input . GetAxis ( "Mouse Y" ) * YSensitivity ;
82
84
83
- if ( yRotOptional != 0f ) m_CharacterTargetRot *= Quaternion . Euler ( 0f , yRotOptional , 0f ) ;
84
- else m_CharacterTargetRot *= Quaternion . Euler ( 0f , yRot , 0f ) ;
85
+ if ( yRotOptional != 0f ) {
86
+ characterTargetRot *= Quaternion . Euler ( 0f , yRotOptional , 0f ) ;
87
+ } else {
88
+ characterTargetRot *= Quaternion . Euler ( 0f , yRot , 0f ) ;
89
+ }
85
90
86
- m_CameraTargetRot *= Quaternion . Euler ( - xRot , 0f , 0f ) ;
91
+ cameraTargetRot *= Quaternion . Euler ( - xRot , 0f , 0f ) ;
87
92
88
- if ( ClampVerticalRotation )
89
- m_CameraTargetRot = ClampRotationAroundXAxis ( m_CameraTargetRot ) ;
93
+ if ( ClampVerticalRotation ) {
94
+ cameraTargetRot = ClampRotationAroundXAxis ( cameraTargetRot ) ;
95
+ }
90
96
91
97
if ( Smooth ) {
92
- character . localRotation = Quaternion . Slerp ( character . localRotation , m_CharacterTargetRot ,
98
+ character . localRotation = Quaternion . Slerp (
99
+ character . localRotation ,
100
+ characterTargetRot ,
93
101
SmoothTime * Time . deltaTime ) ;
94
- camera . localRotation = Quaternion . Slerp ( camera . localRotation , m_CameraTargetRot ,
102
+ camera . localRotation = Quaternion . Slerp (
103
+ camera . localRotation ,
104
+ cameraTargetRot ,
95
105
SmoothTime * Time . deltaTime ) ;
96
106
} else {
97
- character . localRotation = m_CharacterTargetRot ;
98
- camera . localRotation = m_CameraTargetRot ;
107
+ character . localRotation = characterTargetRot ;
108
+ camera . localRotation = cameraTargetRot ;
99
109
}
100
110
101
111
UpdateCursorLock ( ) ;
102
112
}
103
113
104
114
public void SetCursorLock ( bool value ) {
105
115
LockCursor = value ;
106
- if ( ! LockCursor ) {
107
- Cursor . lockState = CursorLockMode . None ;
108
- Cursor . visible = true ;
116
+ if ( LockCursor ) {
117
+ return ;
109
118
}
110
- }
111
119
112
- public void UpdateCursorLock ( ) {
113
- if ( LockCursor ) InternalLockUpdate ( ) ;
120
+ Cursor . lockState = CursorLockMode . None ;
121
+ Cursor . visible = true ;
114
122
}
115
123
116
- private void InternalLockUpdate ( ) {
117
- if ( Input . GetKeyUp ( KeyCode . Escape ) ) _mCursorIsLocked = false ;
118
- else if ( Input . GetMouseButtonUp ( 0 ) ) _mCursorIsLocked = true ;
119
-
120
- if ( _mCursorIsLocked ) {
121
- Cursor . lockState = CursorLockMode . Locked ;
122
- Cursor . visible = false ;
123
- } else if ( ! _mCursorIsLocked ) {
124
- Cursor . lockState = CursorLockMode . None ;
125
- Cursor . visible = true ;
124
+ public void UpdateCursorLock ( ) {
125
+ if ( LockCursor ) {
126
+ InternalLockUpdate ( ) ;
126
127
}
127
128
}
128
129
129
-
130
130
private Quaternion ClampRotationAroundXAxis ( Quaternion q ) {
131
131
q . x /= q . w ;
132
132
q . y /= q . w ;
133
133
q . z /= q . w ;
134
134
q . w = 1.0f ;
135
135
136
136
float angleX = 2.0f * Mathf . Rad2Deg * Mathf . Atan ( q . x ) ;
137
-
138
137
angleX = Mathf . Clamp ( angleX , MinimumX , MaximumX ) ;
139
-
140
138
q . x = Mathf . Tan ( 0.5f * Mathf . Deg2Rad * angleX ) ;
141
139
142
140
return q ;
143
141
}
142
+
143
+ private void InternalLockUpdate ( ) {
144
+ if ( Input . GetKeyUp ( KeyCode . Escape ) ) {
145
+ cursorIsLocked = false ;
146
+ } else if ( Input . GetMouseButtonUp ( 0 ) ) {
147
+ cursorIsLocked = true ;
148
+ }
149
+
150
+ if ( cursorIsLocked ) {
151
+ Cursor . lockState = CursorLockMode . Locked ;
152
+ Cursor . visible = false ;
153
+ } else if ( ! cursorIsLocked ) {
154
+ Cursor . lockState = CursorLockMode . None ;
155
+ Cursor . visible = true ;
156
+ }
157
+ }
144
158
}
159
+
145
160
}
0 commit comments