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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
using UnityEngine;
public class MouseLook : MonoBehaviour
{
public enum RotationAxes
{
MouseXAndY,
MouseX,
MouseY
}
public RotationAxes axes;
public float sensitivityX = 3f;
public float sensitivityY = 3f;
public float minimumX = -360f;
public float maximumX = 360f;
public float minimumY = -80f;
public float maximumY = 80f;
public float forwardSpeedScale = 0.03f;
public float strafeSpeedScale = 0.03f;
private float rotationX;
private float rotationY;
private bool look;
private Quaternion originalRotation;
private void Update()
{
if (GUIUtility.hotControl != 0)
{
return;
}
if (Input.GetMouseButtonDown(0))
{
look = true;
}
if (Input.GetMouseButtonUp(0))
{
look = false;
}
if (look)
{
if (axes == RotationAxes.MouseXAndY)
{
rotationX += Input.GetAxis("Mouse X") * sensitivityX;
rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
rotationX = ClampAngle(rotationX, minimumX, maximumX);
rotationY = ClampAngle(rotationY, minimumY, maximumY);
Quaternion quaternion = Quaternion.AngleAxis(rotationX, Vector3.up);
Quaternion quaternion2 = Quaternion.AngleAxis(rotationY, Vector3.left);
base.transform.localRotation = originalRotation * quaternion * quaternion2;
}
else if (axes == RotationAxes.MouseX)
{
rotationX += Input.GetAxis("Mouse X") * sensitivityX;
rotationX = ClampAngle(rotationX, minimumX, maximumX);
Quaternion quaternion3 = Quaternion.AngleAxis(rotationX, Vector3.up);
base.transform.localRotation = originalRotation * quaternion3;
}
else
{
rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
rotationY = ClampAngle(rotationY, minimumY, maximumY);
Quaternion quaternion4 = Quaternion.AngleAxis(rotationY, Vector3.left);
base.transform.localRotation = originalRotation * quaternion4;
}
}
Vector3 direction = new Vector3(Input.GetAxis("Horizontal"), 0f, Input.GetAxis("Vertical"));
direction = base.transform.TransformDirection(direction);
direction *= 10f;
float num = ((!Input.GetKey(KeyCode.LeftShift)) ? 50f : 150f);
float num2 = Input.GetAxis("Vertical") * forwardSpeedScale * num;
float num3 = Input.GetAxis("Horizontal") * strafeSpeedScale * num;
if (num2 != 0f)
{
base.transform.position += base.transform.forward * num2;
}
if (num3 != 0f)
{
base.transform.position += base.transform.right * num3;
}
}
private void Start()
{
if ((bool)GetComponent<Rigidbody>())
{
GetComponent<Rigidbody>().freezeRotation = true;
}
originalRotation = base.transform.localRotation;
look = false;
}
public static float ClampAngle(float angle, float min, float max)
{
if (angle < -360f)
{
angle += 360f;
}
if (angle > 360f)
{
angle -= 360f;
}
return Mathf.Clamp(angle, min, max);
}
}
|