Menu
CoddyTech

Revisão: Gerenciador de Rodadas

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

Este capítulo deu ao jogo um gerenciador: um singleton que os outros acessam sem um campo e os estados entre os quais ele alterna. O gerenciador de rodada coloca ambos em uso.

challenge icon

Desafio

Fácil

Conclua a coleta de moedas; SetState já está escrito.

  1. Adicione public static RoundManager Instance;, definido em Awake().
  2. Em Update(), faça uma seleção com base em state: Ready aguarda a tecla Space; Playing decrementa timeLeft e, em seguida, passa para Ready na próxima rodada ou para Finished após a última rodada.
  3. public bool TakeCoin(): somente durante Playing, conte a moeda, exiba Coins: 2 e retorne true. Coin.cs destrói uma moeda contabilizada quando o Player toca nela.

Pressione “Jogar” nas três rodadas. Depois, “Verificar”.

Experimente você mesmo

using UnityEngine;
using TMPro;

public enum RoundState { Ready, Playing, Finished }

public class RoundManager : MonoBehaviour
{
    // o singleton: uma Instance estática, definida em Awake()
    public GameObject readyPanel;
    public GameObject playPanel;
    public GameObject finishedPanel;
    public TMP_Text roundText;
    public TMP_Text coinsText;
    public TMP_Text finalText;
    public int rounds = 3;
    public float roundTime = 4f;
    private RoundState state;
    private int round = 1;
    private int coins;
    private float timeLeft;

    void Start()
    {
        SetState(RoundState.Ready);
    }

    void Update()
    {
        // use switch com base em state: Ready espera por Space; Playing faz a contagem regressiva do tempo
    }

    void SetState(RoundState next)
    {
        state = next;
        readyPanel.SetActive(next == RoundState.Ready);
        playPanel.SetActive(next == RoundState.Playing);
        finishedPanel.SetActive(next == RoundState.Finished);
        if (next == RoundState.Ready) roundText.text = "Round " + round;
        if (next == RoundState.Playing) timeLeft = roundTime;
        if (next == RoundState.Finished) finalText.text = "Coins: " + coins;
    }

    // TakeCoin(): uma moeda só é contabilizada durante Playing
}
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

Pratique por conta própria: Playground de Unity