Menu
CoddyTech

Ein Skript steuert das Spiel

Teil des Abschnitts Echte Spiele entwickeln der Unity-Journey von Coddy. Lektion 12 von 60.

Lege den Punktestand im Skript des Spielers, die Leben in einem Gesundheitsskript und die Prüfung auf Spielende in einem dritten Skript ab. Jedes Skript benötigt also die Zahlen der anderen, sodass jede neue Regel mehrere Dateien betrifft. In Unity-Spielen verwaltet normalerweise ein einzelnes Skript diese Zahlen: der GameManager auf einem eigenen leeren GameObject. Er 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 mit game.ShotTaken(false) eine Parade. Für ein Elfmeterschießen mit 3 Schüssen änderst du eine Zahl in einem Skript. Die Prüfung am Anfang von ShotTaken verhindert, dass ein Ball, der nach dem Abpfiff ins Tor rollt, noch gezählt wird.

Du füllst das Feld game im Inspector aus, 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

Lass den GameManager Punkte und Leben verwalten.

  1. AddScore(int points): Erhöhe score, sofern gameOver nicht gesetzt ist, und zeige Score: 6 in scoreText an.
  2. LoseLife(): Ziehe 1 von lives ab und zeige Lives: 2 an; setze bei 0 gameOver, zeige gameOverPanel an und setze player.enabled = false.
  3. Rufe in Gem und Bomb, wenn other.CompareTag("Player") zutrifft, game.AddScore(points) oder game.LoseLife() auf und führe anschließend Destroy(gameObject) aus.

Klicke auf „Spielen“ und triff drei Bomben. Klicke dann auf „Prüfen“.

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, sofern das Spiel nicht vorbei ist
    }

    public void LoseLife()
    {
        // Ziehe ein Leben ab und zeige die verbleibenden Leben an; bei 0 Leben ist das Spiel vorbei
    }
}

Alle Lektionen in Echte Spiele entwickeln

Übe selbstständig: Unity-Playground