Um Script Controla o Jogo
Parte da seção Criando jogos de verdade do Journey de Unity da Coddy. Lição 12 de 56.
Coloque a pontuação no script do jogador, as vidas em um script de saúde e a verificação de fim de jogo em um terceiro, e cada script precisa dos números dos outros, então cada nova regra afeta vários arquivos. Jogos Unity geralmente atribuem esses números a um único script, o GameManager, em um GameObject vazio próprio. Ele controla a pontuação, as vidas e a regra que encerra o jogo. Os outros scripts apenas informam o que aconteceu, chamando seus métodos públicos. Nesta disputa de pênaltis, a rede informa cada gol:
public class GameManager : MonoBehaviour
{
private int goals;
private int shotsLeft = 5;
public void ShotTaken(bool scored)
{
if (shotsLeft == 0) return;
shotsLeft--;
if (scored) goals++;
Debug.Log("Goals: " + goals + ", shots left: " + shotsLeft);
if (shotsLeft == 0) Debug.Log("Full time: " + goals + " goals");
}
}// Net.cs, no gatilho do gol
public GameManager game;
void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Ball")) game.ShotTaken(true);
}A rede não sabe quantos chutes ainda restam nem quando o jogo termina. Ela informa um gol, e o gerenciador decide o que isso significa; o script do goleiro informa uma defesa com game.ShotTaken(false). Para uma disputa de 3 chutes, você altera um número em um único script. A verificação no início de ShotTaken impede que uma bola que entre rolando depois do fim do jogo seja contabilizada.
Você preenche o campo game no Inspector arrastando o objeto GameManager até ele, e o Unity encontra o script GameManager nesse objeto. O gerenciador também é o lugar para o HUD: quando ele contém o texto da pontuação e o painel de fim de jogo, a tela muda no mesmo método que altera os números, e nenhum outro script mexe na interface.
Desafio
FácilUma caça às gemas. As setas movimentam o Player (seu script está pronto). As gemas valem seus points, as bombas custam uma vida, e um GameManager gerencia tudo. O Inspector já vincula o campo game de cada gema e bomba ao objeto GameManager, e os campos do GameManager à HUD e ao Player.
Em GameManager.cs:
AddScore(int points)adiciona os pontos ascoree os exibe emscoreText, comoScore: 6.LoseLife()subtrai 1 delives(3 no início) e o exibe emlivesText, comoLives: 2.- Quando
liveschega a 0, o jogo acaba: exibagameOverPanele desative o script do Player para que as setas parem de funcionar. Depois disso,AddScorenão altera nada.
Em Gem.cs e Bomb.cs: quando o Player (com a tag Player) toca em uma delas, ela informa ao jogo (uma gema informa seus points, uma bomba informa uma vida perdida) e se remove.
Pressione Play, colete as gemas e atinja as bombas; depois, Check.
Experimente você mesmo
using UnityEngine;
using TMPro;
public class GameManager : MonoBehaviour
{
public TMP_Text scoreText;
public TMP_Text livesText;
public GameObject gameOverPanel;
public Player player;
private int score;
private int lives = 3;
private bool gameOver;
public void AddScore(int points)
{
// adicione os pontos e mostre a nova pontuação, a menos que o jogo tenha acabado
}
public void LoseLife()
{
// desconte uma vida e mostre a quantidade restante; com 0 vidas, o jogo acaba
}
}
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