Estados del juego
Parte de la sección Creación de juegos reales del Journey de Unity de Coddy. Lección 14 de 56.
Un juego está en un estado a la vez: esperando al jugador, en ejecución o terminado. Dos valores bool como isPlaying e isOver pueden acabar siendo true por error, y una cadena como "Playng" se compila y nunca coincide. C# tiene un tipo para una lista fija de opciones: el enum. Este semáforo usa uno:
public enum Signal { Red, Yellow, Green }
public class Crossing : MonoBehaviour
{
public Signal signal;
void Update()
{
if (signal == Signal.Red && Input.GetMouseButtonDown(0))
{
signal = Signal.Green;
Debug.Log("Walk!");
}
}
public bool CanWalk()
{
return signal == Signal.Green;
}
}enum Signal { Red, Yellow, Green } crea un tipo nuevo con exactamente tres valores, escritos Signal.Red, Signal.Yellow y Signal.Green. Un campo Signal contiene uno de ellos a la vez; lo comparas con == y lo cambias con =. Un Signal.Gren mal escrito es un error de compilación, así que el error aparece antes de que pulses Play.
El enum se declara fuera de la clase, por lo que cualquier script puede usar Signal, y el script de un peatón puede preguntar crossing.CanWalk(). Un campo enum nuevo comienza con el primer valor, en este caso Red. En el Inspector, un campo enum público aparece como una lista desplegable de sus valores. Internamente, cada valor es un número que se cuenta desde 0: (int)Signal.Green es 2.
Desafío
FácilCruza el suelo sin tocar la lava. Ya están el GameManager (un singleton) y el script Lava; dale estados al juego.
- En
GameManager.cs, encima de la clase, declara un enumGameStatecon los valoresReady,PlayingyGameOver, en ese orden, y dale a GameManager un campo públicoGameStatellamadostate. El juego empieza en Ready. - Mientras el juego está en Ready, la barra espaciadora lo inicia: el estado pasa a Playing y se registra
Go!. - Lava llama a
HitLava(). Mientras el juego está en Playing, eso lo termina: el estado pasa a GameOver y se registraGame over. La barra espaciadora nunca reinicia un juego terminado. - En
Player.cs, las flechas mueven al jugador solo mientras el estado está en Playing.
Presiona Play, prueba las flechas antes de pulsar la barra espaciadora, luego camina hacia la lava y, después, presiona Check.
Pruébalo tú mismo
using UnityEngine;
// Declara aquí el enum GameState: Ready, Playing, GameOver
public class GameManager : MonoBehaviour
{
public static GameManager Instance;
// un campo público de tipo GameState llamado state
void Awake()
{
Instance = this;
}
void Update()
{
// Mientras esté en Ready, Space inicia el juego y registra Go!
}
public void HitLava()
{
// Mientras esté en Playing, el juego termina: registra Game over
}
}
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