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.
Desafio
FácilGameManager (um singleton) e o script Lava já estão lá; dê estados ao jogo.
- Em
GameManager.cs, acima da classe, declare um enumGameStatecom os valoresReady,PlayingeGameOver, nessa ordem, e dê ao GameManager um campo públicoGameStatechamadostate. 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 eGame 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
}
}
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
1Texto na tela
Canvas e textoExiba a pontuaçãoFormate númerosUm cronômetro regressivoRevisão: velocímetro4Cenas e Fases
Carregar uma CenaReiniciar a FasePróxima FaseManter entre CenasRevisão: Seleção de Fases10Projeto: Jogo de Plataforma 3D
O PercursoPlataformas Móveis2Botões e telas
Botões e onClickLambdasConectando no InspectorPainéis ligados e desligadosBarras de vidaRevisão: Loja de melhorias5Salvando com PlayerPrefs
Salvar um númeroCarregar com um valor padrãoRecordeSalvar configuraçõesRevisão: Moedas no banco3O Gerenciador do Jogo
Um Script Controla o JogoO SingletonEstados do JogoAlternando o EstadoRevisão: Gerenciador de Rodadas6Projeto: Corredor Infinito
Três FaixasObstáculos à Frente