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.
Desafío
DifícilEl 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 unpublic enum Stateanidado conPlaying,Paused,WonyLost, y unpublic State state. La noche comienza en Playing. - Mientras está en Playing: los segundos restantes disminuyen desde
nightLength, que se muestra redondeado hacia arriba, comoDawn in 12; cadaspawnEverysegundos aparece un murciélago en uno de losspawnPoints, elegido al azar. Cuando no queda tiempo, se gana la noche. pauseButtoncambia de Playing a Paused y viceversa. Paused detiene el tiempo del juego (Time.timeScale0) y muestrapausePanel; 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
endPanelconendTextque diceYou survived the night!oThe bats got you. restartButtoninicia 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;
}
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
1Texto en pantalla
Canvas y textoMuestra la puntuaciónDa formato a los númerosUn temporizador de cuenta regresivaRepaso: velocímetro4Escenas y niveles
Cargar una escenaReiniciar el nivelSiguiente nivelConservar entre escenasRepaso: selección de nivel10Proyecto: plataformas 3D
El recorridoPlataformas móviles2Botones y pantallas
Botones y onClickLambdasConectar en el InspectorPaneles activados y desactivadosBarras de saludRepaso: tienda de mejoras5Guardar con PlayerPrefs
Guardar un númeroCargar con un valor predeterminadoPuntuación más altaGuardar ajustesRepaso: monedas en el banco3El gestor del juego
Un solo script ejecuta el juegoEl SingletonEstados del juegoActivar el estadoRepaso: gestor de rondas6Proyecto: corredor infinito
Tres carrilesObstáculos por delante9El nuevo sistema de entrada
Dos sistemas de entradaTeclado y ratónPulsado en este fotogramaAcciones de entradaRepaso: cambio de entrada