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.
Desafío
FácilUna 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 ascorey los muestra enscoreText, comoScore: 6.LoseLife()resta 1 alives(3 al inicio) y lo muestra enlivesText, comoLives: 2.- Cuando
livesllega a 0, se acaba el juego: muestragameOverPanely desactiva el script del jugador para que las flechas dejen de funcionar. Después,AddScoreno 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
}
}
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
1Texto en pantalla
Canvas y textoMuestra la puntuaciónDa formato a los númerosUn temporizador de cuenta regresivaRepaso: velocímetro4Escenas y niveles
Cargar una escenaReiniciar el nivelSiguiente nivelConservar entre escenasRepaso: selección de nivel10Proyecto: plataformas 3D
El recorridoPlataformas móviles2Botones y pantallas
Botones y onClickLambdasConectar en el InspectorPaneles activados y desactivadosBarras de saludRepaso: tienda de mejoras5Guardar con PlayerPrefs
Guardar un númeroCargar con un valor predeterminadoPuntuación más altaGuardar ajustesRepaso: monedas en el banco3El gestor del juego
Un solo script ejecuta el juegoEl SingletonEstados del juegoActivar el estadoRepaso: gestor de rondas6Proyecto: corredor infinito
Tres carrilesObstáculos por delante9El nuevo sistema de entrada
Dos sistemas de entradaTeclado y ratónPulsado en este fotogramaAcciones de entradaRepaso: cambio de entrada