-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathFreeFlightCamera.js
72 lines (45 loc) · 1.6 KB
/
FreeFlightCamera.js
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
#pragma strict
class FreeFlightCamera extends MonoBehaviour {
var speedNormal:float = 10.0f;
var speedFast:float = 50.0f;
var mouseSensitivityX:float = 5.0f;
var mouseSensitivityY:float = 5.0f;
function Start() {
var component:Rigidbody = gameObject.GetComponent(Rigidbody);
if (component) {
component.freezeRotation = true;
}
}
function Update() {
var rotY:float = 0.0f;
var rotX:float = 0.0f;
var forward:float;
var strafe:float;
var speed:float;
var trans:Vector3;
var gravity = 8;
forward = Input.GetAxis('Vertical');
strafe = Input.GetAxis('Horizontal');
// Rotation:
if (Input.GetMouseButton(0)) {
rotX = transform.localEulerAngles.y + Input.GetAxis('Mouse X') * mouseSensitivityX;
rotY += Input.GetAxis('Mouse Y') * mouseSensitivityY;
rotY = Mathf.Clamp(rotY, -89.5f, 89.5f);
transform.localEulerAngles = new Vector3(-rotY, rotX, 0.0f);
}
// Move forwards/backwards:
if (forward != 0.0f) {
speed = Input.GetKey(KeyCode.LeftShift) ? speedFast : speedNormal;
trans = new Vector3(0.0f, 0.0f, forward * speed * Time.deltaTime);
gameObject.transform.localPosition += gameObject.transform.localRotation * trans;
}
// Strafe left/right:
if (strafe != 0.0f) {
speed = Input.GetKey(KeyCode.LeftShift) ? speedFast : speedNormal;
trans = new Vector3(strafe * speed * Time.deltaTime, 0.0f, 0.0f);
gameObject.transform.localPosition += gameObject.transform.localRotation * trans;
}
// Gravity:
gameObject.transform.localPosition += -gravity * trans * Time.deltaTime;
}
}