Dos formas de conectar un botón#
Un botón (Button) puede llamar a un método de dos maneras: desde el Inspector (arrastrando) o por código. Las dos son válidas.
1. Desde el Inspector (sin código extra)#
En el componente Button, sección On Click (), pulsa +, arrastra el objeto que tiene el script y elige el método público a llamar. Ideal para diseñadores y menús sencillos.
using UnityEngine;
using UnityEngine.SceneManagement;
public class MenuPrincipal : MonoBehaviour
{
// Estos métodos aparecen en el desplegable On Click del botón
public void Jugar() => SceneManager.LoadScene("Nivel1");
public void Salir() => Application.Quit();
}2. Por código (con AddListener)#
Útil cuando creas botones dinámicamente o prefieres tener la lógica en un sitio:
using UnityEngine;
using UnityEngine.UI;
public class Menu : MonoBehaviour
{
[SerializeField] private Button botonJugar;
void Start() => botonJugar.onClick.AddListener(Jugar);
void OnDestroy() => botonJugar.onClick.RemoveListener(Jugar);
void Jugar() => Debug.Log("¡A jugar!");
}SceneManager.LoadScene("Nivel1") solo funciona si la escena está en File → Build Profiles → Scene List. Ver Escenas y SceneManager.
Application.Quit() cierra la build, pero en el editor no hace nada (es normal). Para probarlo, hazlo en una build, o añade #if UNITY_EDITOR para parar el Play Mode al depurar:
public void Salir()
{
#if UNITY_EDITOR
UnityEditor.EditorApplication.isPlaying = false;
#else
Application.Quit();
#endif
}Necesitas un EventSystem#
Para que la UI reciba clics debe existir un objeto EventSystem en la escena (Unity lo crea solo al añadir el primer elemento de UI). Si tus botones "no responden", comprueba que el EventSystem existe y que no hay otro elemento tapándolos.
Otros elementos interactivos#
- Toggle: casilla on/off (
onValueChangedda unbool). - Slider: valor continuo (
onValueChangedda unfloat) — útil para el volumen. - Dropdown / TMP_Dropdown: selección de una lista.
- InputField / TMP_InputField: entrada de texto.
Todos siguen el mismo patrón: un evento (onValueChanged, onClick) al que te suscribes por Inspector o por código. Es la misma idea de eventos aplicada a la UI.
Errores frecuentes#
- Falta el EventSystem y ningún botón responde.
- Un panel invisible (una Image transparente que ocupa toda la pantalla) por encima, bloqueando los clics.
- Esperar que
Application.Quit()cierre el juego en el editor. - Suscribir con
AddListenery no quitar el listener al destruir (en menús que se recrean).
Resumen#
Conecta botones desde el Inspector (On Click) o por código (onClick.AddListener). Con ellos cargas escenas (recordando los Build Profiles) o sales del juego. Asegúrate de que hay un EventSystem en la escena y de que nada invisible tapa la UI. Toggles, sliders y dropdowns funcionan igual con sus propios eventos.