Menu
CoddyTech

Robuste Ziegel

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

Manche Blöcke benötigen mehr als einen Treffer. Jeder Block speichert, wie viele Treffer er noch aushält: Ein Treffer zieht eins davon ab, und erst der Treffer, der den Wert auf 0 bringt, zerstört den Block und bringt Punkte. Bis dahin ändert der Block seine Farbe, damit der Spieler sehen kann, wie widerstandsfähig er noch ist.

Ein im Inspector ausgefülltes Farbarray ordnet der Anzahl eine Farbe zu. Element 0 ist die Farbe für einen verbleibenden Treffer, Element 1 für zwei, also ist die Farbe für eine Anzahl von n Element n - 1. Ein Schild mit Ladungen funktioniert genauso:

public Color[] chargeColors;   // Element 0: 1 Ladung übrig

void ShowCharges(int charges)
{
    GetComponent<Renderer>().material.color = chargeColors[charges - 1];
}

Beim ersten Auslesen von material erhält dieser Renderer eine eigene Kopie des Materials, sodass ein Schild oder ein Block seine Farbe ändern kann, ohne jede Kopie des Prefabs neu einzufärben. Der GameManager legt fest, wie widerstandsfähig jeder neue Block ist: Ein int[] mit einer Zahl pro Reihe, beginnend mit der obersten Reihe, sorgt dafür, dass die oberste Reihe mehr Treffer aushält als die übrigen.

challenge icon

Aufgabe

Mittel
  1. Füge in Brick public int hits = 1 und public Color[] colors hinzu. In der Szene werden colors mit Blau, Orange und Rot für 1, 2 beziehungsweise 3 verbleibende Treffer belegt.
  2. Schreibe public void SetHits(int count): Die Methode setzt hits und zeigt die Farbe des Steins für diesen Wert an.
  3. Ändere Hit(): Ziehe eins von hits ab. Bei 0 zerbricht der Stein und gibt wie zuvor Punkte; andernfalls zeigt er nur seine neue Farbe an.
  4. Füge in GameManager public int[] rowHits = { 2, 1, 1, 1, 1 }; hinzu und weise jedem neuen Stein mit SetHits den Wert rowHits[row] als Trefferanzahl zu.

Drücke Play, schwäche einen orangefarbenen Stein in der obersten Reihe und klicke dann auf Check.

Probier es selbst

using UnityEngine;

public class Brick : MonoBehaviour
{
    public int points = 10;

    void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.CompareTag("Ball")) Hit();
    }

    public void Hit()
    {
        GameManager.Instance.BrickBroken(this);
        Destroy(gameObject);
    }
}
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