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.
Wyzwanie
TrudnyInspector 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 typpublic enum Statez wartościamiPlaying,Paused,WoniLost, a także polepublic State state. Noc rozpoczyna się w stanie Playing. - Podczas gry: liczba pozostałych sekund maleje od wartości
nightLengthi jest wyświetlana po zaokrągleniu w górę jakoDawn in 12; cospawnEverysekund nietoperz pojawia się w jednym z punktówspawnPoints, wybranym losowo. Gdy czas się skończy, noc zostaje wygrana. pauseButtonprzełącza stan Playing na Paused i z powrotem. Stan Paused zatrzymuje czas gry (Time.timeScale0) i wyświetlapausePanel; 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ą
endPanelz tekstemendTexto treściYou survived the night!lubThe bats got you. restartButtonrozpoczyna 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;
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Tworzenie prawdziwych gier
1Tekst na ekranie
Canvas i tekstWyświetlanie wynikuFormatowanie liczbOdliczanie czasuPowtórka: prędkościomierz4Sceny i poziomy
Wczytaj scenęUruchom poziom ponownieNastępny poziomZachowaj między scenamiPodsumowanie: wybór poziomu10Projekt: platformówka 3D
TrasaRuchome platformy2Przyciski i ekrany
Przyciski i onClickLambdyPodłączanie w InspectorzeWłączanie i wyłączanie paneliPaski zdrowiaPodsumowanie: sklep z ulepszeniami5Zapisywanie za pomocą PlayerPrefs
Zapisz liczbęWczytywanie z wartością domyślnąNajlepszy wynikZapisz ustawieniaPodsumowanie: monety w banku