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 0Trướ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.
Thử thách
Trung bìnhDọn sạch gạch sẽ tạo màn chơi tiếp theo.
- Trong
GameManager, thêmpublic 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. - 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
3Luồng trò chơi
Điểm số và mạngTự luyện tập: Playground Unity