Die Mauer
Lektion 5 von 16 im Kurs Unity-Spiel: Brick Breaker von Coddy.
Die Ziegel stehen in einem Raster: Die Reihen verlaufen von oben nach unten, die Spalten von links nach rechts. Jeder Ziegel ist eine Kopie eines Ziegel-Prefabs, die in zwei verschachtelten Schleifen erstellt wird. Die Position eines Ziegels ergibt sich aus seinen Reihen- und Spaltennummern multipliziert mit dem Abstand zwischen den Ziegelmittelpunkten. Dieser Abstand entspricht der Größe eines Ziegels plus einem kleinen Zwischenraum.
Um ein Raster auf x = 0 zu zentrieren, berechnest du, wo die erste Spalte liegt. Zwischen n Spalten gibt es n minus 1 Zwischenräume. Bei einem Abstand von s liegen die äußeren Mittelpunkte also (n - 1) * s auseinander, und der erste liegt um die Hälfte davon links. Fünf Zaunpfosten im Abstand von 2 Einheiten:
int posts = 5;
float spacing = 2f;
float left = -(posts - 1) * spacing / 2f;
for (int i = 0; i < posts; i++)
{
Instantiate(postPrefab, new Vector3(left + i * spacing, 0f, 3f), Quaternion.identity);
}Sie stehen bei -4, -2, 0, 2 und 4: Der erste Pfosten steht bei -4, nicht bei -5, denn zwischen fünf Pfosten liegen vier Zwischenräume. Das vierte Argument von Instantiate, ein übergeordnetes Transform, ordnet jede Kopie einem Objekt unter, damit die Hierarchy übersichtlich bleibt. Wenn der Typ des Prefab-Felds ein Skript ist, zum Beispiel Brick, gibt Instantiate das Skript der neuen Kopie zurück, sodass du es direkt verwenden kannst.
Aufgabe
MittelBaue die Mauer in GameManager:
- Füge
public Brick brickPrefabundpublic Transform wallhinzu (in der Szene werden das Brick-Prefab und das Wall-Objekt verknüpft), sowiepublic int rows = 5,public int columns = 9,public float spacingX = 1.75f,public float spacingY = 0.75fundpublic float topY = 6f. - Schreibe
void BuildWall(): einen Brick für jede Zeile und jede Spalte, der zum Kindobjekt vonwallwird. Zeile 0 befindet sich bei y =topYund jede Zeile darunter ist umspacingYniedriger. Die Spalten liegen jeweils umspacingXauseinander und sind auf x = 0 zentriert. Die Bricks befinden sich bei z = 0. - Rufe
BuildWall()vonStart()aus auf.
Drücke Play und lass den Ball von der Mauer abprallen (die Bricks zerbrechen noch nicht), dann Check.
Probier es selbst
using UnityEngine;
public class GameManager : MonoBehaviour
{
public static GameManager Instance;
void Awake()
{
Instance = this;
}
// Später: die Ziegelmauer, der Punktestand, die Leben und die Level.
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.