Menu
CoddyTech

Un solo script ejecuta el juego

Parte de la sección Creación de juegos reales del Journey de Unity de Coddy. Lección 12 de 56.

Pon la puntuación en el script del jugador, las vidas en un script de salud y la comprobación del fin de la partida en un tercero, y cada script necesita los números de los demás, así que cada regla nueva afecta a varios archivos. Los juegos de Unity suelen asignar esos números a un solo script, el GameManager, en un GameObject vacío propio. Este se encarga de la puntuación, las vidas y la regla que termina la partida. Los demás scripts solo informan de lo que ha ocurrido llamando a sus métodos públicos. En esta tanda de penaltis, la red informa de cada gol:

public class GameManager : MonoBehaviour
{
    private int goals;
    private int shotsLeft = 5;

    public void ShotTaken(bool scored)
    {
        if (shotsLeft == 0) return;
        shotsLeft--;
        if (scored) goals++;
        Debug.Log("Goals: " + goals + ", shots left: " + shotsLeft);
        if (shotsLeft == 0) Debug.Log("Full time: " + goals + " goals");
    }
}
// Net.cs, en el activador de la portería
public GameManager game;

void OnTriggerEnter(Collider other)
{
    if (other.CompareTag("Ball")) game.ShotTaken(true);
}

La red no sabe cuántos tiros quedan ni cuándo termina la partida. Informa de un gol y el administrador decide qué significa; el script del portero informa de una parada con game.ShotTaken(false). Para una tanda de 3 tiros, cambias un número en un solo script. La comprobación al principio de ShotTaken impide que cuente un balón que entre rodando después del final del partido.

Rellenas el campo game en el Inspector arrastrando el objeto GameManager hasta él, y Unity encuentra el script GameManager en ese objeto. El administrador también es el lugar adecuado para el HUD: cuando contiene el texto de la puntuación y el panel de fin de partida, la pantalla cambia en el mismo método que modifica los números, y ningún otro script toca la interfaz de usuario.

challenge icon

Desafío

Fácil

Una búsqueda de gemas. Las flechas mueven al jugador (su script está listo). Las gemas valen sus points, las bombas cuestan una vida y un GameManager se encarga de todo. El Inspector ya vincula el campo game de cada gema y bomba al objeto GameManager, y los campos del GameManager al HUD y al jugador.

En GameManager.cs:

  • AddScore(int points) suma los puntos a score y los muestra en scoreText, como Score: 6.
  • LoseLife() resta 1 a lives (3 al inicio) y lo muestra en livesText, como Lives: 2.
  • Cuando lives llega a 0, se acaba el juego: muestra gameOverPanel y desactiva el script del jugador para que las flechas dejen de funcionar. Después, AddScore no cambia nada.

En Gem.cs y Bomb.cs: cuando el jugador (con la etiqueta Player) toca uno, informa al juego (una gema, sus points; una bomba, una vida perdida) y se elimina.

Pulsa Play, recoge las gemas y toca las bombas; luego pulsa Check.

Pruébalo tú mismo

using UnityEngine;
using TMPro;

public class GameManager : MonoBehaviour
{
    public TMP_Text scoreText;
    public TMP_Text livesText;
    public GameObject gameOverPanel;
    public Player player;
    private int score;
    private int lives = 3;
    private bool gameOver;

    public void AddScore(int points)
    {
        // suma los puntos y muestra la nueva puntuación, a menos que el juego haya terminado
    }

    public void LoseLife()
    {
        // resta una vida y muestra las vidas restantes; al llegar a 0 vidas, el juego termina
    }
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Creación de juegos reales