jairogarcíarincón

Acciones de los botones


3.64K

Acciones de los botones

Lo único que faltaría por hacer para terminar la receta es programar las acciones de los botones, esto es, que al hacer el clic en ellos el juego cambie a la escena correspondiente.

Para ello, vamos a crear un nuevo script llamado Botones con el siguiente código:


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Botones : MonoBehaviour {

//Objeto Game Manager
private GameManager gameManager;

//Botones
public Button botonInicio, botonJugar, botonOpciones, botonCreditos, botonSalir;

void Start () {

//Busco mi objeto Game Manager
gameManager = FindObjectOfType<GameManager>();

//Añado al botonInicio la acción a ejecutar al hacer clic (cambiar a la escena Inicio desde el Game Manager)
if (botonInicio){
botonInicio.GetComponent<Button>().onClick.AddListener(() => gameManager.cambiarEscena("Inicio"));
}

//Añado al botonJugar la acción a ejecutar al hacer clic (cambiar a la escena Jugar desde el Game Manager)
if (botonJugar){
botonJugar.GetComponent<Button>().onClick.AddListener(() => gameManager.cambiarEscena("Jugar"));
}

//Añado al botonOpciones la acción a ejecutar al hacer clic (cambiar a la escena Opciones desde el Game Manager)
if (botonOpciones){
botonOpciones.GetComponent<Button>().onClick.AddListener(() => gameManager.cambiarEscena("Opciones"));
}

//Añado al botonCreditos la acción a ejecutar al hacer clic (cambiar a la escena Creditos desde el Game Manager)
if (botonCreditos){
botonCreditos.GetComponent<Button>().onClick.AddListener(() => gameManager.cambiarEscena("Creditos"));
}

//Añado al botonSalir la acción a ejecutar al hacer clic (salir de la aplicación)
//Este botón no funcionará en el Editor de Unity, pero si al hacr el Build del Juego.
if (botonSalir){
botonSalir.GetComponent<Button>().onClick.AddListener(() => Application.Quit());
}

}

}


Como ves, hemos creado acciones en todos los botones que se ejecutarán desde el GameManager al hacer clic en los botones, salvo en el caso del Botón Salir, que terminará el juego (cuando hagas el Build y lo pruebes en un ordenador, en mi versión HTML tampoco podrás comprobar su funcionamiento).

Es necesario modificar el código del script GameManager para que incluya el método de cambio de escenas:


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class GameManager : MonoBehaviour {

//Objeto GameManager
private GameObject gameManager;

void Start () {

//Busco el objeto llamado GameManager
GameObject gameManager = GameObject.Find("GameManager");

//Le indico que no se destruya al cargar otra escena
DontDestroyOnLoad(gameManager);

//Cargo la escena de inicio
SceneManager.LoadScene("Inicio");

}

public void cambiarEscena(string nombreEscena){

SceneManager.LoadScene(nombreEscena);

}

}


Y por último, debemos añadir el script Botones a todos los Canvas de todas las escenas con botones, así como asociar las variables de los botones con sus botones correspondientes.

Ten en cuenta que en cada escena hay 4 botones y 5 variables a asignar, de modo que una quedará vacía (la del botón propio de la escena). No hay problema, por eso en el script hemos indicado que solo añada la acción si existe el botón correspondiente.

Una vez hecho esto, ya puedes probar tu gestor de escenas (lanzándolo siempre desde la escena Preload).

Ejercicios propuestos

  • Modifica el ejemplo para sustituir los fondos de color por imágenes fijas.
  • Modifica los botones para sustituirlos por botones personalizados por ti en Photoshop.
  • Añade sonidos a las acciones de los botones.


Publicado el 29 de Enero de 2025

unityescenas