Màn chơi từ văn bản
Bài học 11 trên 19 trong khóa học Trò chơi Unity: phá gạch của Coddy.
Trò chơi có nhiều màn cần cách ghi lại chúng. Văn bản là cách đơn giản nhất: mỗi viên gạch ứng với một ký tự, mỗi hàng ứng với một chuỗi. Ở đây, chữ số biểu thị viên gạch cần số lần đánh tương ứng, dấu chấm biểu thị khoảng trống, còn các hàng của một màn nằm trong một chuỗi, được phân tách bằng /, vì vậy levels của cảnh chứa ba bố cục và bố cục đầu tiên là bức tường hôm nay.
string[] rows = "1.1/22".Split('/'); // "1.1" và "22"
char c = rows[1][0]; // '2'Ký tự chữ số không phải là giá trị số của nó: '3' là một char có mã là 51. Mã của các chữ số tăng dần theo thứ tự, vì vậy trừ '0' sẽ cho ra con số tương ứng: '3' - '0' là số nguyên 3. Mỗi hàng được căn giữa theo độ dài riêng của nó, -(line.Length - 1) * spacingX / 2f.
Thử thách
Trung bìnhDựng bức tường từ văn bản, chẳng hạn như 3.3.3/22222.
- Trong
GameManager, xóa rows, columns và rowHits; thêmpublic string[] levels;vàint level; - Thay BuildWall() bằng
BuildLevel(int index): lưu index vào level, táchlevels[index]tại'/', rồi tạo một viên gạch căn giữa cho mỗi chữ sốcbằngSetHits(c - '0'); dấu chấm biểu thị khoảng trống. Start()gọiBuildLevel(0).
Nhấn Chơi: bức tường vẫn như cũ, nhưng giờ được dựng từ văn bản của màn đầu tiê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 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;
}
}
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