- Home /
Lock Cursor not working right
I have this pause menu script and I want to lock the cursor on the screen when the game is un-paused. When I start the game the cursor is locked and when I pause, the cursor is shown and not locked. But when I unpause the game, I can't get the cursor to get locked in place again. The cursor is hidden (Which I also were going to do) but the cursor can go off-screen.
Here is my code:
var mainMenuSceneName : String;
var thisSceneName : String;
var pauseMenuFont : Font;
var mouseLook1 : MouseLook;
var mouseLook2 : MouseLook;
private var pauseEnabled = false;
function Start(){
pauseEnabled = false;
Time.timeScale = 1;
AudioListener.volume = 1;
Screen.showCursor = false;
Screen.lockCursor = true;
mouseLook1.enabled = true;
mouseLook2.enabled = true;
}
function Update(){
//check if pause button (escape key) is pressed
if(Input.GetButtonDown("Pause")){
//check if game is already paused
if(pauseEnabled == true){
//unpause the game
pauseEnabled = false;
Time.timeScale = 1;
AudioListener.volume = 1;
Screen.showCursor = false;
Screen.lockCursor = true;
mouseLook1.enabled = true;
mouseLook2.enabled = true;
}
//else if game isn't paused, then pause it
else if(pauseEnabled == false){
pauseEnabled = true;
Time.timeScale = 0;
Screen.showCursor = true;
Screen.lockCursor = false;
mouseLook1.enabled = false;
mouseLook2.enabled = false;
}
}
}
private var showGraphicsDropDown = false;
function OnGUI(){
GUI.skin.box.font = pauseMenuFont;
GUI.skin.button.font = pauseMenuFont;
if(pauseEnabled == true){
//Make a background box
GUI.Box(Rect(Screen.width /2 - 100,Screen.height /2 - 100,250,200), "Game Paused");
//Make Resum button
if(GUI.Button(Rect(Screen.width /2 - 100,Screen.height /2 - 50,250,50), "Resum")){
pauseEnabled = false;
Time.timeScale = 1;
AudioListener.volume = 1;
Screen.showCursor = false;
Screen.lockCursor = true;
mouseLook1.enabled = true;
mouseLook2.enabled = true;
}
//Make Restart Level button
if(GUI.Button(Rect(Screen.width /2 - 100,Screen.height /2 ,250,50), "Restart Level")){
Application.LoadLevel(thisSceneName);
}
//Make Mian Menu button
if(GUI.Button(Rect(Screen.width /2 - 100,Screen.height /2 + 50,250,50), "Main Menu")){
Application.LoadLevel(mainMenuSceneName);
}
//Make Change Graphics Quality button
if(GUI.Button(Rect(Screen.width /2 - 100,Screen.height /2 + 100,250,50), "Change Graphics Quality")){
if(showGraphicsDropDown == false){
showGraphicsDropDown = true;
}
else{
showGraphicsDropDown = false;
}
}
//Create the Graphics settings buttons, these won't show automatically, they will be called when
//the user clicks on the "Change Graphics Quality" Button, and then dissapear when they click
//on it again....
if(showGraphicsDropDown == true){
if(GUI.Button(Rect(Screen.width /2 + 150,Screen.height /2 ,250,50), "Fastest")){
QualitySettings.currentLevel = QualityLevel.Fastest;
}
if(GUI.Button(Rect(Screen.width /2 + 150,Screen.height /2 + 50,250,50), "Fast")){
QualitySettings.currentLevel = QualityLevel.Fast;
}
if(GUI.Button(Rect(Screen.width /2 + 150,Screen.height /2 + 100,250,50), "Simple")){
QualitySettings.currentLevel = QualityLevel.Simple;
}
if(GUI.Button(Rect(Screen.width /2 + 150,Screen.height /2 + 150,250,50), "Good")){
QualitySettings.currentLevel = QualityLevel.Good;
}
if(GUI.Button(Rect(Screen.width /2 + 150,Screen.height /2 + 200,250,50), "Beautiful")){
QualitySettings.currentLevel = QualityLevel.Beautiful;
}
if(GUI.Button(Rect(Screen.width /2 + 150,Screen.height /2 + 250,250,50), "Fantastic")){
QualitySettings.currentLevel = QualityLevel.Fantastic;
}
if(GUI.Button(Rect(Screen.width /2 + 150,Screen.height /2 + 300,250,50), "Extremely (EXPERIMENTAL)")){
QualitySettings.currentLevel = QualityLevel.Extremely;
}
if(Input.GetKeyDown("escape")){
showGraphicsDropDown = false;
}
}
//Make quit game button
if (GUI.Button (Rect (Screen.width /2 - 100,Screen.height /2 + 150,250,50), "Quit Game")){
Application.Quit();
}
}
}
Unity automatically unlocks the cursor when you press escape. It's a security 'feature'. Standalone is a slight exception. To have the cursor locked again you have to click somewhere in your game and after that lock the cursor. Atleast, that's what worked for me, when i tried to find a solution to a similar problem (which resulted in spending votes for a missing feature on Unity Feedback).
When I click somewhere in the game, the cursor dissapears but isn't locked.