Ein Skript steuert das Spiel
Teil des Abschnitts Echte Spiele entwickeln der Unity-Journey von Coddy. Lektion 12 von 56.
Lege den Punktestand im Skript des Spielers ab, die Leben in einem Gesundheitsskript und die Spielende-Prüfung in einem dritten Skript. Jedes Skript benötigt also die Zahlen der anderen, sodass jede neue Regel mehrere Dateien betrifft. Unity-Spiele überlassen diese Zahlen normalerweise einem einzigen Skript, dem GameManager, auf einem eigenen leeren GameObject. Es verwaltet den Punktestand, die Leben und die Regel, die das Spiel beendet. Andere Skripte melden nur, was passiert ist, indem sie seine öffentlichen Methoden aufrufen. Bei diesem Elfmeterschießen meldet das Tor jeden Treffer:
public class GameManager : MonoBehaviour
{
private int goals;
private int shotsLeft = 5;
public void ShotTaken(bool scored)
{
if (shotsLeft == 0) return;
shotsLeft--;
if (scored) goals++;
Debug.Log("Goals: " + goals + ", shots left: " + shotsLeft);
if (shotsLeft == 0) Debug.Log("Full time: " + goals + " goals");
}
}// Net.cs, am Trigger des Tors
public GameManager game;
void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Ball")) game.ShotTaken(true);
}Das Tor weiß nicht, wie viele Schüsse noch übrig sind oder wann das Spiel endet. Es meldet einen Treffer, und der Manager entscheidet, was das bedeutet; das Skript des Torwarts meldet eine Parade mit game.ShotTaken(false). Für ein Elfmeterschießen mit 3 Schüssen musst du eine Zahl in einem Skript ändern. Die Prüfung am Anfang von ShotTaken verhindert, dass ein Ball, der nach dem Abpfiff ins Tor rollt, noch gezählt wird.
Du weist dem Feld game im Inspector einen Wert zu, indem du das GameManager-Objekt darauf ziehst. Unity findet dann das GameManager-Skript auf diesem Objekt. Der Manager ist auch der richtige Ort für das HUD: Wenn er den Punktestandtext und das Spielende-Panel enthält, ändert sich der Bildschirm in derselben Methode wie die Zahlen, und kein anderes Skript greift auf die Benutzeroberfläche zu.
Aufgabe
EinfachEine Edelsteinjagd. Mit den Pfeiltasten bewegst du den Player (sein Skript ist bereit). Edelsteine sind ihre points wert, Bomben kosten ein Leben, und ein GameManager kümmert sich um alles. Im Inspector sind das Feld game jedes Edelsteins und jeder Bombe bereits mit dem GameManager-Objekt verknüpft, und die Felder des GameManagers mit dem HUD und dem Player.
In GameManager.cs:
AddScore(int points)addiert die Punkte zuscoreund zeigt sie inscoreTextan, alsScore: 6.LoseLife()zieht 1 vonlivesab (zu Beginn 3) und zeigt den Wert inlivesTextan, alsLives: 2.- Wenn
lives0 erreicht, ist das Spiel vorbei: ZeigegameOverPanelan und schalte das Player-Skript aus, damit die Pfeiltasten nicht mehr funktionieren. Danach ändertAddScorenichts mehr.
In Gem.cs und Bomb.cs: Wenn der Player (mit dem Tag Player) eines berührt, meldet es dies dem Spiel (ein Edelstein meldet seine points, eine Bombe ein verlorenes Leben) und entfernt sich selbst.
Drücke Play, sammle die Edelsteine und berühre die Bomben, dann Check.
Probier es selbst
using UnityEngine;
using TMPro;
public class GameManager : MonoBehaviour
{
public TMP_Text scoreText;
public TMP_Text livesText;
public GameObject gameOverPanel;
public Player player;
private int score;
private int lives = 3;
private bool gameOver;
public void AddScore(int points)
{
// Addiere die Punkte und zeige den neuen Punktestand an, es sei denn, das Spiel ist vorbei
}
public void LoseLife()
{
// Ziehe ein Leben ab und zeige die verbleibenden Leben an; bei 0 Leben ist das Spiel vorbei
}
}
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 Bank3Der Spielmanager
Ein Skript steuert das SpielDas SingletonSpielzuständeZum Zustand wechselnRückblick: Rundenmanager