Menu
CoddyTech

Màn tiếp theo

Bài học 12 trên 19 trong khóa học Trò chơi Unity: phá gạch của Coddy.

Một màn chơi hoàn thành khi viên gạch cuối cùng vỡ. Hãy đếm như sau: cộng một cho mỗi viên gạch được tạo, trừ một cho mỗi viên gạch bị phá vỡ. Khi số đếm bằng 0, màn chơi kết thúc.

Đếm số viên gạch còn trong cảnh vào thời điểm đó không hiệu quả: Destroy đợi đến cuối khung hình, nên viên gạch đang vỡ vẫn còn ở đó.

Sau màn chơi cuối cùng là màn đầu tiên. Phần dư của phép chia giúp số quay vòng:

int next = (2 + 1) % 3;   // 0: sau chỉ số 2 trong 3 cấp, quay lại 0

Trước tiên, bóng quay lại nằm trên thanh đỡ để bức tường mới không xuất hiện khi bóng đang bay.

challenge icon

Thử thách

Trung bình

Dọn sạch gạch sẽ tạo màn chơi tiếp theo.

  1. Trong GameManager, thêm public Ball ball; (liên kết trong cảnh) và int bricksLeft;; BuildLevel tăng biến này thêm một đơn vị cho mỗi viên gạch được tạo.
  2. BrickBroken giảm bricksLeft đi một đơn vị. Khi giá trị bằng 0, gọi ball.ResetToPaddle(); và BuildLevel((level + 1) % levels.Length);

Nhấn Chơi và dọn sạch một màn chơi: bóng chờ trên thanh đỡ và một bức tường mới xuất hiện. Sau đó nhấn Kiểm tra.

Tự làm thử

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;
    }
}

Tất cả bài học trong Trò chơi Unity: phá gạch

Tự luyện tập: Playground Unity