Menu
CoddyTech

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.

challenge icon

Aufgabe

Einfach

Eine 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 zu score und zeigt sie in scoreText an, als Score: 6.
  • LoseLife() zieht 1 von lives ab (zu Beginn 3) und zeigt den Wert in livesText an, als Lives: 2.
  • Wenn lives 0 erreicht, ist das Spiel vorbei: Zeige gameOverPanel an und schalte das Player-Skript aus, damit die Pfeiltasten nicht mehr funktionieren. Danach ändert AddScore nichts 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
    }
}
quiz iconTeste dich selbst

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