Menu
CoddyTech

Repaso: gestor de rondas

Parte de la sección Creación de juegos reales del Journey de Unity de Coddy. Lección 16 de 60.

Este capítulo le dio al juego un administrador: un singleton al que los demás acceden sin un campo y los estados entre los que cambia. El administrador de rondas pone ambos en práctica.

challenge icon

Desafío

Fácil

Termina el juego de recoger monedas; SetState está escrito.

  1. Añade public static RoundManager Instance;, asignándolo en Awake().
  2. En Update(), usa state para decidir: Ready espera a que se pulse Space; Playing descuenta timeLeft y después pasa al siguiente Ready o, tras la última ronda, a Finished.
  3. public bool TakeCoin(): solo durante Playing, cuenta la moneda, muestra Coins: 2 y devuelve true. Coin.cs destruye la moneda contabilizada que toca el Player.

Pulsa «Jugar» para completar las tres rondas. Después, pulsa «Comprobar».

Pruébalo tú mismo

using UnityEngine;
using TMPro;

public enum RoundState { Ready, Playing, Finished }

public class RoundManager : MonoBehaviour
{
    // el singleton: una Instance estática, asignada en 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()
    {
        // selecciona según state: Ready espera a que se pulse Space; Playing hace la cuenta regresiva
    }

    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(): una moneda solo cuenta mientras se está en Playing
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Creación de juegos reales

Practica por tu cuenta: Playground de Unity