Menu
CoddyTech

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.

challenge icon

Desafío

Fácil

Cruza 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 enum GameState con los valores Ready, Playing y GameOver, en ese orden, y dale a GameManager un campo público GameState llamado state. 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 registra Game 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
    }
}
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