Menu
CoddyTech

Noite de Sobrevivência

Parte da seção Criando jogos de verdade do Journey de Unity da Coddy. Lição 56 de 56.

Um sobrevivente está em um campo escuro, e morcegos vêm atrás dele a noite toda, um novo a cada poucos segundos, surgindo de um dos quatro cantos do campo. Cada morcego voa diretamente em direção ao sobrevivente, e o primeiro a alcançá-lo encerra a noite. Um relógio no topo conta os segundos até o amanhecer: sobreviva até lá e você vence. Um botão Pausar congela tudo e, quando a noite termina, Jogar novamente inicia uma nova noite.

O script Player, que movimenta o sobrevivente com a ação Move, está escrito. Escreva GameManager e Bat.

challenge icon

Desafio

Difícil

O Inspector fornece GameManager nightLength (15), spawnEvery (2), batPrefab, spawnPoints (os quatro cantos), dawnText, pauseButton, pausePanel, endPanel, endText e restartButton.

  • Ele é um singleton (public static GameManager Instance) e tem um public enum State aninhado com Playing, Paused, Won e Lost, além de um public State state. A noite começa em Playing.
  • Enquanto estiver em Playing: os segundos restantes diminuem a partir de nightLength, exibidos arredondados para cima, como Dawn in 12; a cada spawnEvery segundos, um morcego aparece em um dos spawnPoints, escolhido aleatoriamente. Quando o tempo acaba, a noite é vencida.
  • pauseButton alterna entre Playing e Paused. Paused para o tempo do jogo (Time.timeScale 0) e mostra pausePanel; ao voltar para Playing, o tempo recomeça e o painel é ocultado. Em Won ou Lost, não faz nada.
  • Um Lose() público faz com que uma noite em Playing seja perdida.
  • Won e Lost param o tempo do jogo e mostram endPanel com endText exibindo You survived the night! ou The bats got you.
  • restartButton inicia uma nova noite carregando a cena novamente.

O Inspector fornece Bat speed (2) e reach (1). Enquanto a noite estiver em Playing, um morcego voa em direção ao jogador (marcado com a tag Player) a speed, mantendo a própria altura. Quando chega a uma distância menor que reach do jogador no plano do chão, chama Lose().

Pressione Play e tente sobreviver até o amanhecer; depois, clique em Check.

Experimente você mesmo

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 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