using UnityEngine; /// /// MouseLook moded by Danko Kozar /// /// Moded by Danko Kozar [AddComponentMenu("Camera-Control/Mouse Look 2")] public class MouseLook2 : MonoBehaviour { public enum RotationAxes { MouseXAndY = 0, MouseX = 1, MouseY = 2 } public enum MouseLookMode { Always, LeftMouseButton, RightMouseButton, MiddleMouseButton } public RotationAxes Axes = RotationAxes.MouseXAndY; public MouseLookMode Mode = MouseLookMode.Always; public float SensitivityX = 15F; public float SensitivityY = 15F; public float MinimumX = -360F; public float MaximumX = 360F; public float MinimumY = -60F; public float MaximumY = 60F; float _rotationX; float _rotationY; Quaternion _originalRotation; // ReSharper disable UnusedMember.Local void Update () // ReSharper restore UnusedMember.Local { bool doProcess = false; switch (Mode) { case MouseLookMode.Always: doProcess = true; break; case MouseLookMode.LeftMouseButton: if (Input.GetMouseButton(0)) doProcess = true; break; case MouseLookMode.RightMouseButton: if (Input.GetMouseButton(1)) doProcess = true; break; case MouseLookMode.MiddleMouseButton: if (Input.GetMouseButton(2)) doProcess = true; break; } if (!doProcess) return; if (Axes == RotationAxes.MouseXAndY) { // Read the mouse input axis _rotationX += Input.GetAxis("Mouse X") * SensitivityX; _rotationY += Input.GetAxis("Mouse Y") * SensitivityY; _rotationX = ClampAngle (_rotationX, MinimumX, MaximumX); _rotationY = ClampAngle (_rotationY, MinimumY, MaximumY); Quaternion xQuaternion = Quaternion.AngleAxis (_rotationX, Vector3.up); Quaternion yQuaternion = Quaternion.AngleAxis (_rotationY, Vector3.left); transform.localRotation = _originalRotation * xQuaternion * yQuaternion; } else if (Axes == RotationAxes.MouseX) { _rotationX += Input.GetAxis("Mouse X") * SensitivityX; _rotationX = ClampAngle (_rotationX, MinimumX, MaximumX); Quaternion xQuaternion = Quaternion.AngleAxis (_rotationX, Vector3.up); transform.localRotation = _originalRotation * xQuaternion; } else { _rotationY += Input.GetAxis("Mouse Y") * SensitivityY; _rotationY = ClampAngle (_rotationY, MinimumY, MaximumY); Quaternion yQuaternion = Quaternion.AngleAxis (_rotationY, Vector3.left); transform.localRotation = _originalRotation * yQuaternion; } } // ReSharper disable UnusedMember.Local void Start () // ReSharper restore UnusedMember.Local { // Make the rigid body not change rotation if (rigidbody) rigidbody.freezeRotation = true; _originalRotation = transform.localRotation; } 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); } }