Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using UnityEngine;
- using UnityStandardAssets.CrossPlatformInput;
- namespace UnityStandardAssets.Characters.FirstPerson
- {
- [Serializable]
- public class MouseLook
- {
- public float XSensitivity = 2f;
- public float YSensitivity = 2f;
- public bool clampVerticalRotation = true;
- public float MinimumX = -90F;
- public float MaximumX = 90F;
- public bool smooth;
- public float smoothTime = 5f;
- public bool lockCursor = true;
- private Quaternion m_CharacterTargetRot;
- private Quaternion m_CameraTargetRot;
- private bool m_cursorIsLocked = true;
- public void Init(Transform character, Transform camera)
- {
- m_CharacterTargetRot = character.localRotation;
- m_CameraTargetRot = camera.localRotation;
- }
- public void LookRotation(Transform character, Transform camera)
- {
- float yRot = CrossPlatformInputManager.GetAxis("Mouse X") * XSensitivity;
- float xRot = CrossPlatformInputManager.GetAxis("Mouse Y") * YSensitivity;
- m_CharacterTargetRot *= Quaternion.Euler (0f, yRot, 0f);
- m_CameraTargetRot *= Quaternion.Euler (-xRot, 0f, 0f);
- if(clampVerticalRotation)
- m_CameraTargetRot = ClampRotationAroundXAxis (m_CameraTargetRot);
- if(smooth)
- {
- character.localRotation = Quaternion.Slerp (character.localRotation, m_CharacterTargetRot,
- smoothTime * Time.deltaTime);
- camera.localRotation = Quaternion.Slerp (camera.localRotation, m_CameraTargetRot,
- smoothTime * Time.deltaTime);
- }
- else
- {
- character.localRotation = m_CharacterTargetRot;
- camera.localRotation = m_CameraTargetRot;
- }
- UpdateCursorLock();
- }
- public void SetCursorLock(bool value)
- {
- lockCursor = value;
- if(!lockCursor)
- {//we force unlock the cursor if the user disable the cursor locking helper
- Cursor.lockState = CursorLockMode.None;
- Cursor.visible = true;
- }
- }
- public void UpdateCursorLock()
- {
- //if the user set "lockCursor" we check & properly lock the cursos
- if (lockCursor)
- InternalLockUpdate();
- }
- private void InternalLockUpdate()
- {
- if(Input.GetKeyUp(KeyCode.Escape))
- {
- m_cursorIsLocked = false;
- }
- else if(Input.GetMouseButtonUp(0))
- {
- m_cursorIsLocked = true;
- }
- if (m_cursorIsLocked)
- {
- Cursor.lockState = CursorLockMode.Locked;
- Cursor.visible = false;
- }
- else if (!m_cursorIsLocked)
- {
- Cursor.lockState = CursorLockMode.None;
- Cursor.visible = true;
- }
- }
- Quaternion ClampRotationAroundXAxis(Quaternion q)
- {
- q.x /= q.w;
- q.y /= q.w;
- q.z /= q.w;
- q.w = 1.0f;
- float angleX = 2.0f * Mathf.Rad2Deg * Mathf.Atan (q.x);
- angleX = Mathf.Clamp (angleX, MinimumX, MaximumX);
- q.x = Mathf.Tan (0.5f * Mathf.Deg2Rad * angleX);
- return q;
- }
- }
- }
Add Comment
Please, Sign In to add comment