Menu
CoddyTech

Paneles activados y desactivados

Parte de la sección Creación de juegos reales del Journey de Unity de Coddy. Lección 9 de 60.

Un panel es una imagen de interfaz de usuario que suele extenderse por toda la pantalla y tiene botones y textos como elementos secundarios. SetActive(false) en el panel lo oculta junto con todo lo que contiene, y no se puede hacer clic en sus botones mientras está oculto. Mientras se muestra, su imagen recibe los clics destinados a cualquier elemento que haya debajo, por lo que no se pueden pulsar los botones situados detrás de un panel que ocupa toda la pantalla. Este mapa se abre con un botón en una esquina y se cierra con un botón en el mapa:

public GameObject mapPanel;
public Button mapButton;
public Button closeButton;

void Start()
{
    mapPanel.SetActive(false);
    mapButton.onClick.AddListener(() => mapPanel.SetActive(true));
    closeButton.onClick.AddListener(() => mapPanel.SetActive(false));
}

Es más fácil editar los paneles mientras se muestran, así que a menudo las escenas se guardan con ellos activos, y Start() los oculta. Mantén el script que abre un panel fuera de ese panel: un GameObject inactivo no ejecuta Start() ni Update(), así que un script en un panel guardado oculto nunca conectaría sus botones. El Canvas o un objeto administrador del juego, que permanecen activos, son buenos lugares para colocarlo. mapPanel.activeSelf indica si el panel está activo, así que mapPanel.SetActive(!mapPanel.activeSelf) alterna su estado.

challenge icon

Desafío

Fácil

Añade un menú al juego del prado: escribe Start() en Menu.cs.

  1. Oculta menuPanel y helpPanel con SetActive(false).
  2. menuButton muestra el menú y establece mover.enabled = false; resumeButton lo oculta y establece mover.enabled = true.
  3. helpButton oculta el menú y muestra la ayuda; backButton hace lo contrario.

Pulsa «Jugar» y abre el menú: el jugador no puede caminar hasta pulsar «Reanudar». Después, pulsa «Comprobar».

Pruébalo tú mismo

using UnityEngine;
using UnityEngine.UI;

public class Menu : MonoBehaviour
{
    public GameObject menuPanel;
    public GameObject helpPanel;
    public Button menuButton;
    public Button resumeButton;
    public Button helpButton;
    public Button backButton;
    public PlayerMover mover;

    void Start()
    {
        // Oculta ambos paneles y luego conecta Menu, Resume, Help y Back
    }
}

Todas las lecciones de Creación de juegos reales

Practica por tu cuenta: Playground de Unity