Menu
CoddyTech

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.

challenge icon

Thử thách

Trung bình

Các khối gạch ở hàng trên cùng cần bị đánh trúng hai lần.

  1. Trong Brick, thêm public 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àu colors[hits - 1].
  2. 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.
  3. Trong GameManager, thêm public int[] rowHits = { 2, 1, 1, 1, 1 }; và gọi brick.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