- 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
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