Level Berikutnya
Pelajaran 12 dari 19 dalam kursus Game Unity: Brick Breaker di Coddy.
Sebuah level selesai saat brick terakhirnya pecah. Hitung: tambahkan satu untuk setiap brick yang dibuat, kurangi satu untuk setiap brick yang pecah, dan saat hitungannya 0, level selesai.
Menghitung brick yang masih ada di scene tidak berhasil pada saat itu: Destroy menunggu hingga akhir frame, jadi brick yang sedang pecah masih ada di sana.
Setelah level terakhir, kembali ke level pertama. Sisa hasil pembagian memutar angka kembali:
int next = (2 + 1) % 3; // 0: setelah indeks 2 dari 3 level, kembali ke 0Bola kembali ke paddle terlebih dahulu, jadi dinding baru tidak muncul saat bola sedang melayang.
Tantangan
SedangMenghancurkan semua balok akan membangun level berikutnya.
- Di
GameManager, tambahkanpublic Ball ball;(scene menautkannya) danint bricksLeft;; BuildLevel menambahkan satu untuk setiap balok yang dibangunnya. - BrickBroken mengurangi bricksLeft satu. Saat nilainya 0, panggil
ball.ResetToPaddle();danBuildLevel((level + 1) % levels.Length);
Tekan tombol “Main” dan hancurkan semua balok di satu level: bola menunggu di atas paddle dan dinding baru muncul. Lalu tekan tombol “Periksa”.
Coba sendiri
using UnityEngine;
using TMPro;
public class GameManager : MonoBehaviour
{
public static GameManager Instance;
public Brick brickPrefab;
public Transform wall;
public string[] levels;
public float spacingX = 1.75f;
public float spacingY = 0.75f;
public float topY = 6f;
public int lives = 3;
public TMP_Text scoreText;
public TMP_Text livesText;
int score;
int level;
void Awake()
{
Instance = this;
}
void Start()
{
BuildLevel(0);
ShowHud();
}
void BuildLevel(int index)
{
level = index;
string[] rows = levels[index].Split('/');
for (int row = 0; row < rows.Length; row++)
{
string line = rows[row];
float left = -(line.Length - 1) * spacingX / 2f;
for (int col = 0; col < line.Length; col++)
{
char c = line[col];
if (c == '.') continue;
Vector3 pos = new Vector3(left + col * spacingX, topY - row * spacingY, 0f);
Brick brick = Instantiate(brickPrefab, pos, Quaternion.identity, wall);
brick.SetHits(c - '0');
}
}
}
public void BrickBroken(Brick brick)
{
score += brick.points;
ShowHud();
}
public void BallLost(Ball lost)
{
lives--;
ShowHud();
lost.ResetToPaddle();
}
void ShowHud()
{
scoreText.text = "Score: " + score;
livesText.text = "Lives: " + lives;
}
}
Semua pelajaran di Game Unity: Brick Breaker
Latihan sendiri: Playground Unity