- Home /
Question by
ChompIV · Jul 04, 2018 at 01:45 PM ·
mousebooleanfps controllerstandard-assetsmouse look
Enabling/Disabling Cursor only when paused, Using FPS Controller Script, seem to be stuck!
For some reason my script is not working, I want it to only display the cursor when the pause menu is open ("p"), and close when it is closed (when "p" is pushed again). I have no idea where the issue is in my script and it looks like it should work but it doesn't so maybe it has to do with the rest of the MouseLook script? Any help is much appreciated! Code between "//" or "/////////" marks was inserted by me, the rest is from the standard assets
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityStandardAssets.CrossPlatformInput;
namespace UnityStandardAssets.Characters.FirstPerson
{
[Serializable]
public class MouseLook
{
public float XSensitivity = 2;
public float YSensitivity = 2;
public bool clampVerticalRotation = true;
public float MinimumX = -90F;
public float MaximumX = 90F;
public bool smooth;
public float smoothTime = 5f;
public bool lockCursor = true;
public Slider slider;
public Slider slider1;
//
public bool onoff1 = false;
//
private Quaternion m_CharacterTargetRot;
private Quaternion m_CameraTargetRot;
public bool m_cursorIsLocked = true;
public MouseLook mouseLookCustom;
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)
{
Cursor.lockState = CursorLockMode.None;
Cursor.visible = true;
}
}
public void UpdateCursorLock()
{
if (lockCursor)
InternalLockUpdate();
}
private void InternalLockUpdate()
{
////////////
if (Input.GetKeyDown("p"))
{
onoff1 = !onoff1;
if (onoff1)
{
SetCursorLock(false);
m_cursorIsLocked = false;
Debug.Log("On");
}
else
{
SetCursorLock(true);
m_cursorIsLocked = true;
Debug.Log("Off");
}
}
/////////////
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;
}
}
}
Comment
Your answer
![](https://koobas.hobune.stream/wayback/20220612170027im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
FPS Controller Mouse not locking consistantly 0 Answers
How to fix mouse Look X and Y sensitivity (built-in script) 3 Answers
PauseMenu - Camera moves in pausemenu 0 Answers
Limit click spawns to One 2 Answers