Menu
CoddyTech

Level Selesai

Pelajaran 11 dari 16 dalam kursus Game Unity: Brick Breaker di Coddy.

Game dengan beberapa level memerlukan cara untuk menuliskan level-level tersebut. Teks adalah cara termudah: satu karakter untuk setiap batu bata, satu string untuk setiap baris. Dalam game ini, digit adalah batu bata dengan jumlah pukulan sesuai nilainya dan titik adalah celah. Baris-baris suatu level disimpan dalam satu string, dipisahkan dengan /, sehingga satu level muat dalam satu baris di Inspector. Split('/') memotong string menjadi array baris. Sebuah taman yang ditanam dari teks:

string layout = "t.t.t/.ttt.";
string[] rows = layout.Split('/');
for (int row = 0; row < rows.Length; row++)
    for (int col = 0; col < rows[row].Length; col++)
        if (rows[row][col] == 't') Instantiate(treePrefab, new Vector3(col, 0f, -row), Quaternion.identity);

Karakter digit bukanlah angkanya: '3' adalah char dengan kode 51. Kode sepuluh digit berurutan, jadi dengan mengurangi '0' (kode 48), kamu mendapatkan angkanya: '3' - '0' adalah int 3.

Level selesai ketika batu bata terakhirnya hancur. Hitung jumlahnya: tambahkan satu untuk setiap batu bata yang dibuat, kurangi satu untuk setiap batu bata yang hancur, dan saat jumlahnya 0, level selesai. Menghitung batu bata yang masih ada di scene tidak akan berhasil pada saat itu, karena Destroy menunggu hingga akhir frame, sehingga batu bata yang sedang hancur masih ada di sana.

challenge icon

Tantangan

Sedang

Buat batu bata dari teks. Scene mengisi levels dengan tiga tata letak; yang pertama adalah dinding yang kamu miliki sekarang.

  1. Di GameManager, hapus rows, columns, dan rowHits. Tambahkan public string[] levels, public Ball ball (scene menghubungkan Ball), sebuah int level, dan sebuah int bricksLeft.
  2. Ganti BuildWall() dengan void BuildLevel(int index): fungsi ini menyimpan index di level dan memisahkan levels[index] menjadi baris pada /. Untuk setiap digit c, fungsi ini membuat batu bata dengan c - '0' hit dan menambahkan satu ke bricksLeft; titik tetap kosong. Baris-barisnya tetap berpusat dan berjarak seperti sebelumnya. Start() memanggil BuildLevel(0).
  3. Di BrickBroken, kurangi bricksLeft satu. Saat nilainya 0, kembalikan bola ke paddle dan buat level berikutnya; setelah level terakhir, kembali ke level pertama.

Tekan Play dan selesaikan satu level jika kamu bisa, lalu tekan Check.

Coba sendiri

using UnityEngine;
using TMPro;

public class GameManager : MonoBehaviour
{
    public static GameManager Instance;

    public Brick brickPrefab;
    public Transform wall;
    public int rows = 5;
    public int columns = 9;
    public float spacingX = 1.75f;
    public float spacingY = 0.75f;
    public float topY = 6f;
    public int[] rowHits = { 2, 1, 1, 1, 1 };
    public int lives = 3;
    public TMP_Text scoreText;
    public TMP_Text livesText;

    int score;

    void Awake()
    {
        Instance = this;
    }

    void Start()
    {
        BuildWall();
        ShowHud();
    }

    void BuildWall()
    {
        float left = -(columns - 1) * spacingX / 2f;
        for (int row = 0; row < rows; row++)
        {
            for (int col = 0; col < columns; col++)
            {
                Vector3 pos = new Vector3(left + col * spacingX, topY - row * spacingY, 0f);
                Brick brick = Instantiate(brickPrefab, pos, Quaternion.identity, wall);
                brick.SetHits(rowHits[row]);
            }
        }
    }

    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;
    }
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Game Unity: Brick Breaker