diff options
author | chai <215380520@qq.com> | 2024-03-13 11:00:58 +0800 |
---|---|---|
committer | chai <215380520@qq.com> | 2024-03-13 11:00:58 +0800 |
commit | 6ce8b9e22fc13be34b442c7b6af48b42cd44275a (patch) | |
tree | b38119d2acf0a982cb67e381f146924b9bfc3b3f /MouseLook.cs |
+init
Diffstat (limited to 'MouseLook.cs')
-rw-r--r-- | MouseLook.cs | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/MouseLook.cs b/MouseLook.cs new file mode 100644 index 0000000..45c7cca --- /dev/null +++ b/MouseLook.cs @@ -0,0 +1,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); + } +} |