Menu
CoddyTech

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 0

Bola kembali ke paddle terlebih dahulu, jadi dinding baru tidak muncul saat bola sedang melayang.

challenge icon

Tantangan

Sedang

Menghancurkan semua balok akan membangun level berikutnya.

  1. Di GameManager, tambahkan public Ball ball; (scene menautkannya) dan int bricksLeft;; BuildLevel menambahkan satu untuk setiap balok yang dibangunnya.
  2. BrickBroken mengurangi bricksLeft satu. Saat nilainya 0, panggil ball.ResetToPaddle(); dan BuildLevel((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