Programación de Funcionalidades de Botones en Unity

Clase 35 de 53Curso de C# para Videojuegos

Resumen

Domina la conexión entre interfaz y lógica en Unity con un flujo claro: activar el botón play, ocultar o mostrar el canvas con un MenuManager tipo singleton, y salir con seguridad usando compilación condicional. Verás cómo aprovechar OnClick del Button, Canvas.enabled y las recomendaciones de Unity para distintas plataformas.

¿Cómo conectar el botón play con el GameManager usando onclick?

Configura el inicio de partida desde la UI sin tocar el teclado. La meta: ocultar el menú y arrancar el juego como antes se hacía con la tecla start.

  • Selecciona el botón play en el Inspector y ubica la sección OnClick.
  • En GameObject, asigna el objeto de escena que gestiona la partida: el GameManager.
  • En la lista de funciones, elige el método que inicia el juego: _StartGame_.
  • Resultado inmediato: al pulsar play, la partida empieza detrás del menú. Aún falta ocultarlo.

¿Qué resuelve exactamente onclick del button?

  • Define qué método de tus scripts se invoca al pulsar el botón.
  • Permite vincular eventos de UI con lógica del juego sin código adicional en el botón.

¿Cómo ocultar y mostrar el menú con un menu manager singleton?

Crea un director único que controle todos los menús. Así, el GameManager solo notifica cambios de estado y el menú se muestra u oculta con precisión.

  • Crea un script C sharp llamado MenuManager y asígnalo (por simplicidad) al propio GameManager.
  • Expón un Canvas público para arrastrar el canvas global de la UI: menuCanvas.
  • Implementa un singleton con SharedInstance en Awake.
  • Usa Canvas.enabled para alternar visibilidad: _ShowMainMenu_ y _HideMainMenu_.
using UnityEngine;
using UnityEngine.UI;

public class MenuManager : MonoBehaviour
{
    public static MenuManager SharedInstance; // instancia compartida
    public Canvas menuCanvas; // canvas global del menú

    private void Awake()
    {
        if (SharedInstance == null)
        {
            SharedInstance = this;
        }
    }

    public void ShowMainMenu()
    {
        if (menuCanvas != null) menuCanvas.enabled = true;
    }

    public void HideMainMenu()
    {
        if (menuCanvas != null) menuCanvas.enabled = false;
    }
}

¿Cuándo llamar a show u hide desde el GameManager?

  • Al empezar la partida: MenuManager.SharedInstance.HideMainMenu();.
  • En estado menú: MenuManager.SharedInstance.ShowMainMenu();.
  • Mientras no haya un menú de game over: vuelve a mostrar el principal cuando el estado sea GameState.GameOver.
// Dentro del cambio de estado del juego
if (estado == GameState.Menu)
{
    MenuManager.SharedInstance.ShowMainMenu();
}
else if (estado == GameState.GameOver)
{
    MenuManager.SharedInstance.ShowMainMenu();
}
else // al iniciar la partida
{
    MenuManager.SharedInstance.HideMainMenu();
}

Efecto final: al pulsar play se oculta la UI; al morir el personaje, el menú reaparece y el ciclo de juego queda completo.

¿Cómo implementar el botón quit con compilación condicional en c sharp y unity?

Añade una salida coherente según plataforma. Unity no recomienda forzar la salida en PC o consola: el usuario puede usar el botón home o la acción del sistema. Aun así, prepara el método para cubrir el Editor y las builds.

  • Implementa _ExitGame_ en MenuManager con compilación condicional.
  • En el Editor: UnityEditor.EditorApplication.isPlaying = false; (equivale a pulsar stop).
  • En builds: Application.Quit();.
public void ExitGame()
{
#if UNITY_EDITOR
    UnityEditor.EditorApplication.isPlaying = false; // salir del modo play en el Editor
#else
    Application.Quit(); // salir en builds
#endif
}

¿Cómo vincular el botón quit desde la ui?

  • Selecciona el botón quit y abre OnClick.
  • Asigna el GameObject con MenuManager.
  • Elige la función: _MenuManager.ExitGame_.
  • Prueba: al pulsar quit en el Editor, se detiene la ejecución; en builds, se cierra la app.

Palabras clave que debes dominar: OnClick, GameManager, _StartGame_, Canvas.enabled, _MenuManager_, _SharedInstance_, _Awake_, _ShowMainMenu_, _HideMainMenu_, _ExitGame_, UnityEditor.EditorApplication.isPlaying, Application.Quit, GameState.Menu, GameState.GameOver. ¿Qué paso implementarás ahora en tu proyecto? Comparte dudas o mejoras en los comentarios.