Version: 5.4 beta (switch to 5.3)
LanguageEnglish
  • C#
  • JS

Script language

Select your preferred scripting language. All code snippets will be displayed in this language.

Cursor.lockState

Suggest a change

Success!

Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.

Close

Sumbission failed

For some reason your suggested change could not be submitted. Please try again in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.

Close

Cancel

public static var lockState: CursorLockMode;
public static CursorLockMode lockState;

Description

How should the cursor be handled?

When locked, the cursor will automatically be centered on view and made to never leave the view. The cursor will be invisible in this state, regardless of the value of Cursor.visible. Changing thet lockState to a different value will then make Cursor.visible control visibility again. When confined, the cursor behave normally with the exception of being confined to the view.

To provide a good user experience it is recommended to only lock or confine the cursor as a result of pressing a button. Also you should check if the cursor was reset, in order to e.g. pause the game or bring up a game menu. In the Editor the cursor will automatically be reset when you press escape. In the Standalone Player you have full control over the mouse cursor, thus it won't automatically be reset unless you switch applications.

#pragma strict
var wantedMode: CursorLockMode;
// Apply requested cursor state
function SetCursorState() {
	Cursor.lockState = wantedMode;
	// Hide cursor when locking
	Cursor.visible = (CursorLockMode.Locked != wantedMode);
}
function OnGUI() {
	GUILayout.BeginVertical();
	// Release cursor on escape keypress
	if (Input.GetKeyDown(KeyCode.Escape))
		Cursor.lockState = wantedMode = CursorLockMode.None;
	switch (Cursor.lockState) {
		case CursorLockMode.None:
			GUILayout.Label("Cursor is normal");
		if (GUILayout.Button("Lock cursor"))
			wantedMode = CursorLockMode.Locked;
		if (GUILayout.Button("Confine cursor"))
			wantedMode = CursorLockMode.Confined;

break; case CursorLockMode.Confined: GUILayout.Label("Cursor is confined"); if (GUILayout.Button("Lock cursor")) wantedMode = CursorLockMode.Locked; if (GUILayout.Button("Release cursor")) wantedMode = CursorLockMode.None;

break; case CursorLockMode.Locked: GUILayout.Label("Cursor is locked"); if (GUILayout.Button("Unlock cursor")) wantedMode = CursorLockMode.None; if (GUILayout.Button("Confine cursor")) wantedMode = CursorLockMode.Confined;

break; } GUILayout.EndVertical(); SetCursorState(); }
using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour { CursorLockMode wantedMode; // Apply requested cursor state void SetCursorState () { Cursor.lockState = wantedMode; // Hide cursor when locking Cursor.visible = (CursorLockMode.Locked != wantedMode); } void OnGUI () { GUILayout.BeginVertical (); // Release cursor on escape keypress if (Input.GetKeyDown (KeyCode.Escape)) Cursor.lockState = wantedMode = CursorLockMode.None; switch (Cursor.lockState) { case CursorLockMode.None: GUILayout.Label ("Cursor is normal"); if (GUILayout.Button ("Lock cursor")) wantedMode = CursorLockMode.Locked; if (GUILayout.Button ("Confine cursor")) wantedMode = CursorLockMode.Confined; break; case CursorLockMode.Confined: GUILayout.Label ("Cursor is confined"); if (GUILayout.Button ("Lock cursor")) wantedMode = CursorLockMode.Locked; if (GUILayout.Button ("Release cursor")) wantedMode = CursorLockMode.None; break; case CursorLockMode.Locked: GUILayout.Label ("Cursor is locked"); if (GUILayout.Button ("Unlock cursor")) wantedMode = CursorLockMode.None; if (GUILayout.Button ("Confine cursor")) wantedMode = CursorLockMode.Confined; break; }

GUILayout.EndVertical ();

SetCursorState (); } }