Menu
CoddyTech

Noche de supervivencia

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

Un superviviente está en un campo oscuro, y los murciélagos vienen a por él toda la noche; aparece uno nuevo cada dos segundos desde una de las cuatro esquinas del campo. Cada murciélago vuela directamente hacia el superviviente, y el primero que lo alcanza pone fin a la noche. Un reloj en la parte superior cuenta los segundos que faltan para el amanecer: aguanta hasta entonces y ganarás. Un botón de pausa lo congela todo y, cuando termina la noche, Jugar de nuevo inicia una nueva.

El script Player, que permite al superviviente caminar con la acción Move, ya está escrito. Escribe GameManager y Bat.

challenge icon

Desafío

Difícil

El Inspector proporciona a GameManager nightLength (15), spawnEvery (2), batPrefab, spawnPoints (las cuatro esquinas), dawnText, pauseButton, pausePanel, endPanel, endText y restartButton.

  • Es un singleton (public static GameManager Instance) y tiene un public enum State anidado con Playing, Paused, Won y Lost, y un public State state. La noche comienza en Playing.
  • Mientras está en Playing: los segundos restantes disminuyen desde nightLength, que se muestra redondeado hacia arriba, como Dawn in 12; cada spawnEvery segundos aparece un murciélago en uno de los spawnPoints, elegido al azar. Cuando no queda tiempo, se gana la noche.
  • pauseButton cambia de Playing a Paused y viceversa. Paused detiene el tiempo del juego (Time.timeScale 0) y muestra pausePanel; al volver a Playing, reanuda el tiempo y lo oculta. En Won o Lost no hace nada.
  • Un Lose() público hace que una noche en Playing termine en Lost.
  • Won y Lost detienen el tiempo del juego y muestran endPanel con endText que dice You survived the night! o The bats got you.
  • restartButton inicia una nueva noche cargando de nuevo la escena.

El Inspector proporciona a Bat speed (2) y reach (1). Mientras la noche está en Playing, un murciélago vuela hacia el jugador (etiquetado como Player) a speed, manteniendo su propia altura. Cuando se acerca al jugador a una distancia menor que reach en el plano del suelo, llama a Lose().

Pulsa Play e intenta aguantar hasta el amanecer; después, pulsa Check.

Pruébalo tú mismo

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

public class GameManager : MonoBehaviour
{
    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;
}
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