Phá vỡ
Bài học 6 trên 19 trong khóa học Trò chơi Unity: phá gạch của Coddy.
Những viên gạch không có Rigidbody, nhưng quả bóng thì có, và Unity gửi OnCollisionEnter đến cả hai đối tượng trong một vụ va chạm. Vì vậy, viên gạch có thể tự nhận biết cú va chạm. Trong script của viên gạch, gameObject là viên gạch, còn collision.gameObject là vật đã va vào nó.
Điểm số thuộc về GameManager, còn các viên gạch là bản sao của một prefab. Prefab là một tài nguyên nằm bên ngoài cảnh, nên các trường của nó không thể trỏ đến GameManager trong cảnh thông qua Inspector. GameManager gán chính nó cho GameManager.Instance dạng static trong Awake(), vì vậy script nào cũng có thể truy cập nó, kể cả các bản sao của prefab.
Một chiếc bình vỡ khi người chơi chạy va vào nó:
void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.CompareTag("Player")) Shatter();
}
public void Shatter()
{
Destroy(gameObject);
}Destroy(gameObject) xóa chiếc bình. Destroy(collision.gameObject) sẽ xóa người chơi, còn Destroy(this) chỉ xóa script, để lại chiếc bình nguyên vẹn. Đặt thao tác phá vỡ trong một phương thức public riêng giúp đoạn code khác, chẳng hạn như bom hoặc vật phẩm tăng sức mạnh, cũng có thể phá vỡ chiếc bình.
Thử thách
Trung bìnhQuả bóng phá vỡ các viên gạch và ghi điểm tương ứng.
- Trong
GameManager, thêmint score;vàpublic void BrickBroken(Brick brick), hàm này cộngbrick.pointsvào điểm số. - Trong
Brick, viếtpublic void Hit():GameManager.Instance.BrickBroken(this);, sau đó gọiDestroy(gameObject); - Trong
OnCollisionEntercủa Brick, gọiHit()khi đối tượng có thẻBall.
Nhấn Chơi rồi phóng bóng: mỗi viên gạch bị bóng chạm vào sẽ biến mất. Sau đó nhấn Kiểm tra.
Tự làm thử
using UnityEngine;
public class Brick : MonoBehaviour
{
public int points = 10;
// Tiếp theo: quả bóng phá vỡ một viên gạch và ghi số điểm của viên gạch đó.
}
Tất cả bài học trong Trò chơi Unity: phá gạch
Tự luyện tập: Playground Unity