Gạch cứng
Bài học 7 trên 19 trong khóa học Trò chơi Unity: phá gạch của Coddy.
Một số viên gạch cần bị đánh trúng nhiều lần. Mỗi viên gạch lưu số lần đánh trúng còn lại: mỗi lần bị đánh trúng sẽ trừ đi một, và chỉ lần đánh trúng khiến số này về 0 mới phá vỡ viên gạch và ghi điểm. Trước lúc đó, viên gạch đổi màu để người chơi biết nó còn bền đến mức nào.
Một mảng màu được điền trong Inspector ánh xạ số lần đánh trúng còn lại sang một màu. Phần tử 0 là màu khi còn một lần đánh trúng, phần tử 1 là màu khi còn hai lần, vì vậy màu ứng với số lần n là phần tử n - 1. Khiên có số lượt tích trữ cũng hoạt động tương tự:
public Color[] chargeColors; // phần tử 0: còn 1 lượt nạp
void ShowCharges(int charges)
{
GetComponent<Renderer>().material.color = chargeColors[charges - 1];
}Khi đọc material lần đầu, renderer này sẽ có bản sao riêng của material, nên một chiếc khiên hoặc một viên gạch có thể đổi màu mà không cần tô lại mọi bản sao của prefab. GameManager quyết định độ bền của mỗi viên gạch mới: một int[] có một con số cho mỗi hàng, bắt đầu từ hàng trên cùng, cho phép hàng trên cùng chịu được nhiều lần đánh trúng hơn các hàng còn lại.
Thử thách
Trung bìnhCác khối gạch ở hàng trên cùng cần bị đánh trúng hai lần.
- Trong
Brick, thêmpublic int hits = 1;,public Color[] colors;(cảnh thiết lập màu xanh dương, cam, đỏ) vàSetHits(int count): đặt số lần trúng và màucolors[hits - 1]. Hit()giảm số lần trúng đi một: khi còn 0, khối gạch vỡ và cộng điểm; nếu không, hiển thị màu mới.- Trong
GameManager, thêmpublic int[] rowHits = { 2, 1, 1, 1, 1 };và gọibrick.SetHits(rowHits[row])cho mỗi khối gạch mới.
Nhấn Chơi: hàng trên cùng có màu cam và chuyển sang xanh dương khi bị đánh trúng. Sau đó nhấn Kiểm tra.
Tự làm thử
using UnityEngine;
public class Brick : MonoBehaviour
{
public int points = 10;
void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.CompareTag("Ball")) Hit();
}
public void Hit()
{
GameManager.Instance.BrickBroken(this);
Destroy(gameObject);
}
}
Tất cả bài học trong Trò chơi Unity: phá gạch
Tự luyện tập: Playground Unity