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()) { GetComponent().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); } }