Menu
CoddyTech

Estados do Jogo

Parte da seção Criando Jogos de Verdade do Journey de Unity da Coddy. Lição 14 de 60.

Um jogo fica em um estado por vez: aguardando o jogador, em execução ou encerrado. Dois valores bool, como isPlaying e isOver, podem acabar sendo true ao mesmo tempo por engano, e uma string como "Playng" compila, mas nunca corresponde ao valor esperado. C# tem um tipo para uma lista fixa de opções: o enum. Este semáforo usa um:

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 } cria um novo tipo com exatamente três valores, escritos como Signal.Red, Signal.Yellow e Signal.Green. Um campo Signal guarda um deles por vez; você o compara com == e o altera com =. Um erro de digitação como Signal.Gren gera um erro de compilação, então o problema aparece antes de você pressionar “Jogar”.

O enum é declarado fora da classe, então qualquer script pode usar Signal, e o script de um pedestre pode consultar crossing.CanWalk(). Um novo campo enum começa com o primeiro valor, neste caso, Red. No Inspector, um campo enum público aparece como uma lista suspensa com seus valores. Internamente, cada valor é um número contado a partir de 0: (int)Signal.Green é 2.

challenge icon

Desafio

Fácil

Defina três estados para a travessia da lava.

  1. Declare public enum GameState { Ready, Playing, GameOver } acima da classe GameManager e public GameState state; nela.
  2. Em Update(), enquanto estiver no estado Ready, a tecla Space define o estado como Playing e registra Go!. Em HitLava(), enquanto estiver no estado Playing, defina o estado como GameOver e registre Game over.
  3. Em Player.cs, leia as teclas de direção somente quando GameManager.Instance.state == GameState.Playing.

Pressione “Jogar”: as teclas de direção aguardam a tecla Space. Depois, pressione “Verificar”.

Experimente você mesmo

using UnityEngine;

// Declare o enum GameState aqui: Ready, Playing, GameOver

public class GameManager : MonoBehaviour
{
    public static GameManager Instance;
    // um campo público GameState chamado state

    void Awake()
    {
        Instance = this;
    }

    void Update()
    {
        // Enquanto estiver em Ready, Space inicia o jogo e registra Go!
    }

    public void HitLava()
    {
        // Enquanto estiver em Playing, o jogo termina: registre Game over
    }
}

Todas as lições de Criando Jogos de Verdade

Pratique por conta própria: Playground de Unity