- Home /
Mouse Cursor Problem
I have created a pause menu in my First Person game and whenever I pause the game the mouse cursor shows up, but the pause button such as "Resume" do not work whenever I click on them. However, when I hit escape to exit out the pause menu, the cursor is still visible. Then I pause the game and the buttons start to work. I have found out that the buttons only work when the cursor is visible "in-game", but I do not want it to be visible in game. Btw, I am using the "FPS" Asset from the Unity store as my camera.
Pause Menu Script
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityStandardAssets.Characters.FirstPerson;
public class PauseMenu : MonoBehaviour
{
public bool Paused = false;
public GameObject ThePlayer;
public GameObject Pause;
// Update is called once per frame
void Update()
{
if (Input.GetButtonDown("Cancel"))
{
if (Paused == false)
{
Time.timeScale = 0;
Paused = true;
Pause.SetActive(true);
ThePlayer.GetComponent<FirstPersonController>().enabled = false;
Cursor.visible = true;
}
else
{
ThePlayer.GetComponent<FirstPersonController>().enabled = true;
Paused = false;
Pause.SetActive(false);
Cursor.visible = false;
Time.timeScale = 1;
}
}
}
public void Resume()
{
ThePlayer.GetComponent<FirstPersonController>().enabled = true;
Paused = false;
Pause.SetActive(false);
Time.timeScale = 1;
Cursor.visible = false;
}
}
Answer by EternalClickbait · May 13, 2019 at 10:26 AM
What do you need void Resume()
for? Is it a built in MonoBehaviour function? Also, I would create a function for pausing and unpausing the game. Make sure that the pause menu script isn't in any way attached to an object that it's disabling, as that can cause serious issues. For GameObject
, I'm pretty sure it's .SetActive()
not enabled.
Answer by tormentoarmagedoom · May 13, 2019 at 10:34 AM
Hello.
Im not sure to understand whats the difference between :
"pause button such as "Resume"
"I hit escape to exit out the pause menu"
AS i can understand the command Cursor.visible = false; is only executed when Resume() method is executed.
So, first to prevent this, you can change the cursorvisible in Update
Void Update()
{
if (Paused == false) Cursor visible command
else Cursor not visible command
}
This way, does not care whow you enter/exit pause mode.
The problem with the resume button, i recommend you to make a raycast to debug.log the object name you clicked. So you can see if the problem is in the button execution, or the problem is the button is not beeing pressed. Add this to Update just during developing to have info about what are you clicking
if (Input.GetMouseButtonDown(0))
{
RaycastHit hit;
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit))
{
if (hit.collider != null)
{
Debug.Log(hit.collider.gameonbject.name);
}
}
}
Try it and post a comment of what you have/find/discover.
Good luck!
Your answer
Follow this Question
Related Questions
Lock mouse position with a Rect, possible? 1 Answer
Is there a way to lock the cursor while still detecting mouse movement? 1 Answer
Hiding a Cursor? 3 Answers
Locking the Cursor at the center. 4 Answers
Cursor out of range 0 Answers