Đến căn cứ
Bài học 3 trên 25 trong khóa học Game Unity: thủ thành của Coddy.
Kẻ địch ở điểm đường cuối cùng đã đến căn cứ: nó biến mất và căn cứ mất một mạng. Số mạng thuộc về GameManager. Chẳng bao lâu nữa, kẻ địch sẽ được tạo từ prefab, mà prefab không thể tham chiếu đến GameManager trong cảnh, nên kẻ địch gửi thông báo bằng một sự kiện tĩnh. Sự kiện này thuộc lớp Enemy, vì vậy GameManager chỉ cần đăng ký một lần là có thể nhận thông báo từ mọi kẻ địch, kể cả những kẻ được tạo sau đó. Kẻ địch phát sự kiện bằng ReachedBase?.Invoke(this);: ? bỏ qua lời gọi nếu không có ai lắng nghe, còn this cho bộ lắng nghe biết loại kẻ địch nào đã đến được căn cứ.
void OnEnable()
{
Enemy.ReachedBase += OnReachedBase;
}
void OnDisable()
{
Enemy.ReachedBase -= OnReachedBase;
}Sự kiện tĩnh tồn tại suốt vòng đời của trò chơi, nên mỗi += đều cần có -= tương ứng: nếu GameManager đã bị hủy mà chưa hủy đăng ký, hệ thống vẫn sẽ gọi nó.
Thử thách
DễKẻ địch đến căn cứ sẽ làm mất mạng.
- Trong
EnemyData, thêmpublic int damage;. - Trong
Enemy, thêmpublic static event Action<Enemy> ReachedBase;(using System;). Khi đến điểm đường đi cuối cùng, phát sự kiện này rồi hủy kẻ địch. - Trong
GameManager, thêm[SerializeField] private int startLives = 20;vàprivate int lives;, rồi gán giá trị trong Start. Đăng ký sự kiện như trên;OnReachedBasetrừenemy.data.damagekhỏi số mạng.
Nhấn Chơi: cả hai kẻ địch biến mất ở căn cứ. Sau đó nhấn Kiểm tra.
Tự làm thử
using UnityEngine;
// Để sau: số mạng, tiền, giao diện HUD, thắng và thua.
public class GameManager : MonoBehaviour
{
}
Tất cả bài học trong Game Unity: thủ thành
Tự luyện tập: Playground Unity