Menu
CoddyTech

Noc przetrwania

Część sekcji Tworzenie prawdziwych gier ścieżki Unity w Coddy. Lekcja 56 z 56.

Ocalały stoi na ciemnym polu, a nietoperze przylatują po niego przez całą noc — co kilka sekund pojawia się nowy nietoperz z jednego z czterech rogów pola. Każdy nietoperz leci prosto na ocalałego, a pierwszy, który do niego dotrze, kończy noc. Zegar u góry odlicza sekundy do świtu: przetrwaj do tego czasu, a wygrasz. Przycisk Pauza zatrzymuje wszystko, a gdy noc się skończy, przycisk Zagraj ponownie rozpoczyna nową noc.

Skrypt Player, który porusza ocalałym za pomocą akcji Move, jest już napisany. Napisz skrypty GameManager i Bat.

challenge icon

Wyzwanie

Trudny

Inspector udostępnia w GameManager pola nightLength (15), spawnEvery (2), batPrefab, spawnPoints (cztery narożniki), dawnText, pauseButton, pausePanel, endPanel, endText i restartButton.

  • To singleton (public static GameManager Instance) i ma zagnieżdżony typ public enum State z wartościami Playing, Paused, Won i Lost, a także pole public State state. Noc rozpoczyna się w stanie Playing.
  • Podczas gry: liczba pozostałych sekund maleje od wartości nightLength i jest wyświetlana po zaokrągleniu w górę jako Dawn in 12; co spawnEvery sekund nietoperz pojawia się w jednym z punktów spawnPoints, wybranym losowo. Gdy czas się skończy, noc zostaje wygrana.
  • pauseButton przełącza stan Playing na Paused i z powrotem. Stan Paused zatrzymuje czas gry (Time.timeScale 0) i wyświetla pausePanel; po ponownym rozpoczęciu gry czas rusza, a panel zostaje ukryty. W stanie Won lub Lost przycisk nic nie robi.
  • Wywołanie publicznej metody Lose() powoduje przegraną, gdy noc jest w stanie Playing.
  • Stany Won i Lost zatrzymują czas gry i wyświetlają endPanel z tekstem endText o treści You survived the night! lub The bats got you.
  • restartButton rozpoczyna nową noc, ponownie wczytując scenę.

Inspector udostępnia w Bat pola speed (2) i reach (1). Gdy noc jest w stanie Playing, nietoperz leci w stronę gracza (oznaczonego tagiem Player) z prędkością speed, zachowując własną wysokość. Gdy znajdzie się w odległości mniejszej niż reach od gracza na płaszczyźnie terenu, wywołuje Lose().

Naciśnij Play i spróbuj dotrwać do świtu, a następnie kliknij Check.

Spróbuj swoich sił

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 iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Tworzenie prawdziwych gier