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.
Aufgabe
Mittel- Füge in
Brickpublic int hits = 1undpublic Color[] colorshinzu. In der Szene werdencolorsmit Blau, Orange und Rot für 1, 2 beziehungsweise 3 verbleibende Treffer belegt. - Schreibe
public void SetHits(int count): Die Methode setzthitsund zeigt die Farbe des Steins für diesen Wert an. - Ändere
Hit(): Ziehe eins vonhitsab. Bei 0 zerbricht der Stein und gibt wie zuvor Punkte; andernfalls zeigt er nur seine neue Farbe an. - Füge in
GameManagerpublic int[] rowHits = { 2, 1, 1, 1, 1 };hinzu und weise jedem neuen Stein mitSetHitsden WertrowHits[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);
}
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.