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 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.

challenge icon

Desafío

Fácil

Asigna tres estados al cruce de lava.

  1. Declara public enum GameState { Ready, Playing, GameOver } encima de la clase GameManager y public GameState state; dentro de ella.
  2. En Update(), mientras el estado sea Ready, la tecla Space establece Playing y registra Go!. En HitLava(), mientras el estado sea Playing, establece GameOver y registra Game over.
  3. En Player.cs, lee las flechas solo mientras GameManager.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

Practica por tu cuenta: Playground de Unity