Menu
CoddyTech

Einen Ball verlieren

Lektion 8 von 16 im Kurs Unity-Spiel: Brick Breaker von Coddy.

Ein Ball, der am Schläger vorbeifliegt, ist verloren. Unter dem Schläger hat die Szene jetzt eine DeathZone: ein Objekt mit einem Box Collider, bei dem Is Trigger aktiviert ist, und dem Tag DeathZone. Ein Trigger hält nichts auf; er sendet OnTriggerEnter(Collider other), wenn etwas mit einem Rigidbody hineingerät. Der Ball meldet den Verlust an den GameManager, der die Leben verwaltet und entscheidet, was als Nächstes passiert.

Eine Murmel, die ins Wasser fällt, startet erneut an ihrem Spawnpunkt:

void OnTriggerEnter(Collider other)
{
    if (other.CompareTag("Water")) Respawn();
}

void Respawn()
{
    rb.linearVelocity = Vector3.zero;
    transform.position = spawnPoint.position;
}

Der Ball braucht weniger als die Murmel. Sein Update() setzt ihn bereits in jedem Frame auf den Schläger, solange launched false ist. Daher muss ein Zurücksetzen nur dieses Flag löschen und den Ball anhalten: Im nächsten Frame wird er zurückgetragen, und mit der Leertaste wird er erneut abgeschossen.

challenge icon

Aufgabe

Mittel
  1. Schreibe in Ball public void ResetToPaddle(): Der Ball ist nicht mehr gestartet und hört auf, sich zu bewegen.
  2. Füge OnTriggerEnter zu Ball hinzu: Wenn er in das Objekt mit dem Tag DeathZone eintritt, rufe GameManager.Instance.BallLost(this) auf.
  3. Füge in GameManager public int lives = 3 und public void BallLost(Ball lost) hinzu: ein Leben weniger, und der verlorene Ball kommt zurück auf den Schläger.

Es gibt noch kein Spielende, daher kann die Anzahl der Leben vorerst unter 0 sinken.

Drücke Play, lass den Ball absichtlich verfehlen, starte ihn erneut und klicke dann auf Check.

Probier es selbst

using UnityEngine;

public class GameManager : MonoBehaviour
{
    public static GameManager Instance;

    public Brick brickPrefab;
    public Transform wall;
    public int rows = 5;
    public int columns = 9;
    public float spacingX = 1.75f;
    public float spacingY = 0.75f;
    public float topY = 6f;
    public int[] rowHits = { 2, 1, 1, 1, 1 };

    int score;

    void Awake()
    {
        Instance = this;
    }

    void Start()
    {
        BuildWall();
    }

    void BuildWall()
    {
        float left = -(columns - 1) * spacingX / 2f;
        for (int row = 0; row < rows; row++)
        {
            for (int col = 0; col < columns; col++)
            {
                Vector3 pos = new Vector3(left + col * spacingX, topY - row * spacingY, 0f);
                Brick brick = Instantiate(brickPrefab, pos, Quaternion.identity, wall);
                brick.SetHits(rowHits[row]);
            }
        }
    }

    public void BrickBroken(Brick brick)
    {
        score += brick.points;
    }
}
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 Unity-Spiel: Brick Breaker