Menu
CoddyTech

Estados do Jogo

Parte da seção Criando jogos de verdade do Journey de Unity da Coddy. Lição 14 de 56.

Um jogo está 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 e nunca corresponde. 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 armazena um deles por vez; você o compara com == e o altera com =. Um erro de digitação como Signal.Gren causa um erro de compilação, então o erro aparece antes de você pressionar Play.

O enum é declarado fora da classe, então qualquer script pode usar Signal, e o script de um pedestre pode chamar crossing.CanWalk(). Um novo campo enum começa com o primeiro valor, aqui 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

GameManager (um singleton) e o script Lava já estão lá; dê estados ao jogo.

  • Em GameManager.cs, acima da classe, declare um enum GameState com os valores Ready, Playing e GameOver, nessa ordem, e dê ao GameManager um campo público GameState chamado state. O jogo começa em Ready.
  • Enquanto o jogo estiver em Ready, a tecla Espaço inicia o jogo: o estado passa a ser Playing e Go! é registrado.
  • A lava chama HitLava(). Enquanto o jogo estiver em Playing, isso o encerra: o estado passa a ser GameOver e Game over é registrado. A tecla Espaço nunca reinicia um jogo encerrado.
  • Em Player.cs, as setas movimentam o jogador somente enquanto o estado for Playing.

Pressione Play, experimente as setas antes de pressionar Espaço, depois caminhe até a lava e, por fim, clique em Check.

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 do tipo 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
    }
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Criando jogos de verdade