Estados del juego
Parte de la sección Creación de juegos reales del Journey de Unity de Coddy. Lección 14 de 60.
Un juego está en un estado a la vez: esperando al jugador, en ejecución o terminado. Dos valores bool como isPlaying y 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: 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 como 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 error ortográfico como Signal.Gren provoca un error de compilación, así que el error aparece antes de que pulses «Jugar».
El enum se declara fuera de la clase, así que cualquier script puede usar Signal, y el script de un peatón puede consultar crossing.CanWalk(). Un campo enum nuevo empieza con el primer valor, que aquí es Red. En el Inspector, un campo enum público aparece como una lista desplegable con sus valores. Por debajo, cada valor es un número contado desde 0: (int)Signal.Green es 2.
Desafío
FácilAsigna tres estados al cruce de lava.
- Declara
public enum GameState { Ready, Playing, GameOver }encima de la clase GameManager ypublic GameState state;dentro de ella. - En
Update(), mientras el estado sea Ready, la tecla Space establece Playing y registraGo!. EnHitLava(), mientras el estado sea Playing, establece GameOver y registraGame over. - En
Player.cs, lee las flechas solo mientrasGameManager.Instance.state == GameState.Playing.
Pulsa «Jugar»: las flechas esperarán a que pulses Space. Después, pulsa «Comprobar».
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 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
}
}
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ímetro2Botones 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 sin fin
Tres carrilesObstáculos por delante9El nuevo sistema de entrada
Dos sistemas de entradaTeclado y ratónPulsado en este fotogramaAcciones de entradaRepaso: cambio de entradaPractica por tu cuenta: Playground de Unity