- Home /
Cursor Lockmode only works once?
I'm having a problem where the cursor only locks itself once on the screen. I'm using visible along side it too but I stopped that but it still won't lock itself.
Here's my code :
public class StartUp : MonoBehaviour {
public GameObject player;
public bool cursorUnlocked = false;
public float CursorLockUnlockWait = 0.5f;
public float CursorWaitOver;
void Start () {
//Instantiate player In random place on terrain////////////////////////////////////////
Vector3 position = new Vector3(Random.Range(0f, 4000f), 700f, Random.Range(0f, 4000f));
Instantiate(player, position, transform.rotation);
Cursor.visible = false;
Cursor.lockState = CursorLockMode.Locked;
////////////////////////////////////////////////////////////////////////////////////////
}
void Update()
{
//Cursor Lock/Unlock//////////////////////////////////////////////////////////////////////////
if (Input.GetKey("escape") && cursorUnlocked == false && CursorWaitOver < Time.time)
{
cursorUnlocked = true;
CursorWaitOver = Time.time + CursorLockUnlockWait;
Cursor.visible = true;
Cursor.lockState = CursorLockMode.None;
}
if (Input.GetKeyDown("escape") && cursorUnlocked == true && CursorWaitOver < Time.time)
{
cursorUnlocked = false;
CursorWaitOver = Time.time + CursorLockUnlockWait;
Cursor.visible = false;
Cursor.lockState = CursorLockMode.Locked;
}
/////////////////////////////////////////////////////////////////////////////////////////////
}
}
The wait is necessary because other wise it will transition between unlocked and then locked in a blink of an eye!
Anyway hope you guys can find a solution to this and thanks for the help!
Answer by ZefanS · Mar 21, 2016 at 09:43 AM
Cursor locking stuff is certainly a bit weird. I've made a few changes to your script and it seems to work as expected now. The wait was actually only necessary because you were using two if statements in a row instead of an if...else if. I also changed the first if from GetKey() to GetKeyDown(). Here's the updated script:
using UnityEngine;
public class StartUp : MonoBehaviour
{
public GameObject player;
public bool cursorUnlocked = false;
void Start()
{
//Instantiate player In random place on terrain////////////////////////////////////////
Vector3 position = new Vector3(Random.Range(0f, 4000f), 700f, Random.Range(0f, 4000f));
Instantiate(player, position, transform.rotation);
Cursor.visible = false;
Cursor.lockState = CursorLockMode.Locked;
////////////////////////////////////////////////////////////////////////////////////////
}
void Update()
{
//Cursor Lock/Unlock//////////////////////////////////////////////////////////////////////////
if (Input.GetKeyDown(KeyCode.Escape) && cursorUnlocked == false)
{
cursorUnlocked = true;
Cursor.visible = true;
Cursor.lockState = CursorLockMode.None;
}
else if (Input.GetKeyDown(KeyCode.Escape) && cursorUnlocked == true)
{
cursorUnlocked = false;
Cursor.visible = false;
Cursor.lockState = CursorLockMode.Locked;
}
/////////////////////////////////////////////////////////////////////////////////////////////
}
}
Note that there's actually a bug in the editor that makes cursor locking not work properly. Try building your project with this script and it should work as expected.
Hope this helps!
Your answer
![](https://koobas.hobune.stream/wayback/20220612072627im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
Distribute terrain in zones 3 Answers
Centre cursor - Unity 5 (not locking or making invisible) 1 Answer
Screen.CursorLock problems 2 Answers
Aimable reticle using mouse which has limited degrees 1 Answer