Überlebensnacht
Teil des Abschnitts Echte Spiele entwickeln der Unity-Journey von Coddy. Lektion 56 von 56.
Ein Überlebender steht auf einem dunklen Feld, und die ganze Nacht über kommen Fledermäuse auf ihn zu, alle paar Sekunden eine neue aus einer der vier Ecken des Feldes. Jede Fledermaus fliegt geradewegs auf den Überlebenden zu, und die erste, die ihn erreicht, beendet die Nacht. Eine Uhr oben zählt die Sekunden bis zum Morgengrauen: Halte bis dahin durch und du gewinnst. Eine Pause-Schaltfläche friert alles ein, und wenn die Nacht endet, beginnt „Erneut spielen“ eine neue Nacht.
Das Skript Player, das den Überlebenden mit der Aktion Move bewegt, ist geschrieben. Schreibe GameManager und Bat.
Aufgabe
SchwerDer Inspector stellt GameManager nightLength (15), spawnEvery (2), batPrefab, spawnPoints (die vier Ecken), dawnText, pauseButton, pausePanel, endPanel, endText und restartButton bereit.
- Es ist ein Singleton (
public static GameManager Instance) und enthält ein verschachteltespublic enum StatemitPlaying,Paused,WonundLostsowie einpublic State state. Die Nacht beginnt im Zustand Playing. - Während Playing läuft die verbleibende Zeit von
nightLengthherunter und wird aufgerundet angezeigt, etwa alsDawn in 12; allespawnEverySekunden erscheint eine Fledermaus an einem zufällig ausgewählten Punkt ausspawnPoints. Wenn keine Zeit mehr übrig ist, ist die Nacht gewonnen. pauseButtonschaltet zwischen Playing und Paused um. Paused hält die Spielzeit an (Time.timeScale0) und zeigtpausePanelan; bei der Rückkehr zu Playing läuft die Zeit wieder und das Panel wird ausgeblendet. Im Zustand Won oder Lost bewirkt die Taste nichts.- Ein öffentliches
Lose()versetzt eine Nacht im Zustand Playing in den Zustand Lost. - Won und Lost halten die Spielzeit an und zeigen
endPanelmitendTextan, dessen TextYou survived the night!oderThe bats got youlautet. restartButtonstartet eine neue Nacht, indem die Szene erneut geladen wird.
Der Inspector stellt Bat speed (2) und reach (1) bereit. Während die Nacht im Zustand Playing ist, fliegt eine Fledermaus mit speed auf den Spieler (mit dem Tag Player) zu und behält dabei ihre eigene Höhe bei. Sobald sie sich auf der Bodenebene innerhalb von reach zum Spieler befindet, ruft sie Lose() auf.
Drücke Play und versuche, bis zum Morgengrauen durchzuhalten, und klicke dann auf Check.
Probier es selbst
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;
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Echte Spiele entwickeln
1Text auf dem Bildschirm
Canvas und TextPunktestand anzeigenZahlen formatierenEin Countdown-TimerRückblick: Tachometer4Szenen und Level
Eine Szene ladenDas Level neu startenNächstes LevelZwischen Szenen beibehaltenRückblick: Levelauswahl10Projekt: 3D-Plattformer
Der ParcoursBewegliche Plattformen2Buttons und Bildschirme
Buttons und onClickLambdasVerknüpfungen im InspectorPanels ein- und ausblendenGesundheitsbalkenRückblick: Upgrade-Shop5Speichern mit PlayerPrefs
Eine Zahl speichernMit einem Standardwert ladenHöchstpunktzahlEinstellungen speichernRückblick: Münzen auf der Bank