Si tu cursor se queda bloqueado o invisible después de cambiar de escena en Unity, el problema generalmente se debe a que su estado (Cursor.lockState
) no se restablece correctamente al cargar una nueva escena.
✅ El cursor se desbloqueará correctamente al cambiar de escena.
✅ Funciona tanto en el menú como en el juego.
✅ Se puede personalizar para bloquear el cursor en ciertas escenas y desbloquearlo en otras.
🔹 1. Restaurar el Cursor al Cargar una Nueva Escena
Si tu cursor queda bloqueado o invisible al cambiar de escena, usa Cursor.lockState
y Cursor.visible
en un script que se ejecute cada vez que una nueva escena se cargue.
📌 Paso 1: Crear el Script CursorManager.cs
- Ve a la carpeta
Scripts
(Assets/Scripts
). - Clic derecho > Create > C# Script.
- Nómbralo
CursorManager.cs
y ábrelo. - Pega este código:
using UnityEngine;
using UnityEngine.SceneManagement;
public class CursorManager : MonoBehaviour
{
void Start()
{
// Hacer visible el cursor y desbloquearlo cuando la escena cargue
Cursor.lockState = CursorLockMode.None;
Cursor.visible = true;
}
// Si quieres que el cursor se oculte en ciertas escenas (como en el juego), usa esto:
void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{
if (scene.buildIndex == 0) // Si es la escena del menú (índice 0)
{
Cursor.lockState = CursorLockMode.None;
Cursor.visible = true;
}
else // Si es cualquier otra escena (ej: dentro del juego)
{
Cursor.lockState = CursorLockMode.Locked;
Cursor.visible = false;
}
}
void OnEnable()
{
SceneManager.sceneLoaded += OnSceneLoaded;
}
void OnDisable()
{
SceneManager.sceneLoaded -= OnSceneLoaded;
}
}
🔹 2. Asignar el Script en Unity
📌 Paso 2: Crear un Objeto CursorController
- En la Jerarquía (
Hierarchy
), crea unGameObject
vacío. - Nómbralo
CursorController
. - Añádele el script
CursorManager.cs
(Add Component > CursorManager
).
🔹 3. Personalizar el Comportamiento del Cursor
🔹 Si quieres que el cursor siempre esté visible y desbloqueado en todas las escenas:
void Start()
{
Cursor.lockState = CursorLockMode.None;
Cursor.visible = true;
}
🔹 Si quieres que el cursor esté bloqueado en el juego pero visible en el menú:
void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{
if (scene.buildIndex == 0) // Menú principal
{
Cursor.lockState = CursorLockMode.None;
Cursor.visible = true;
}
else // Juego
{
Cursor.lockState = CursorLockMode.Locked;
Cursor.visible = false;
}
}
🎯 Resultado Final
✅ El cursor se desbloquea correctamente en el menú.
✅ Se bloquea dentro del juego si es necesario.
✅ Funciona automáticamente cada vez que cambia la escena.
🔥 ¡Prueba esto y dime si funciona! 🚀🎮
