Menu
CoddyTech

El final de la noche

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

El último desafío completa un juego entero: un administrador con estados, una pausa que detiene el tiempo, dos finales y un reinicio que restablece la escala de tiempo.

challenge icon

Desafío

Difícil

Añade una pausa, dos finales y una opción para reiniciar.

  1. pauseButton alterna únicamente entre Playing y Paused: Paused establece Time.timeScale en 0 y muestra pausePanel; Playing deshace ambas cosas.
  2. Al llegar a 0 segundos, la noche se gana. En Won o Lost: escala de tiempo 0, endPanel muestra You survived the night! o The bats got you en endText.
  3. restartButton establece la escala de tiempo en 1 y vuelve a cargar la escena.

Pulsa «Jugar», pausa, pierde y vuelve a jugar. Después, pulsa «Comprobar».

Pruébalo tú mismo

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using TMPro;

public class GameManager : MonoBehaviour
{
    public enum State { Playing, Paused, Won, Lost }

    public static GameManager Instance;

    public float nightLength = 15f;
    public float spawnEvery = 2f;
    public GameObject batPrefab;
    public Transform[] spawnPoints;
    public TMP_Text dawnText;
    public Button pauseButton;
    public GameObject pausePanel;
    public GameObject endPanel;
    public TMP_Text endText;
    public Button restartButton;

    public State state;

    private float timeLeft;
    private float spawnTimer;

    void Awake()
    {
        Instance = this;
    }

    void Start()
    {
        state = State.Playing;
        timeLeft = nightLength;
        ShowDawn();
    }

    void Update()
    {
        if (state != State.Playing) return;

        timeLeft -= Time.deltaTime;
        spawnTimer += Time.deltaTime;
        if (spawnTimer >= spawnEvery)
        {
            spawnTimer -= spawnEvery;
            Transform point = spawnPoints[Random.Range(0, spawnPoints.Length)];
            Instantiate(batPrefab, point.position, Quaternion.identity);
        }
        ShowDawn();
    }

    public void Lose()
    {
        if (state != State.Playing) return;
        state = State.Lost;
    }

    void ShowDawn()
    {
        dawnText.text = "Dawn in " + Mathf.CeilToInt(timeLeft);
    }
}
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