Trong Unity mình hay dùng một kỹ thuật là Singleton để quản lý các đối tượng mà có kiểu duy nhất như mấy cái SoundManager, LockScene (khóa màn hình khi loading…), popup ThongBao… mấy thằng này có đặc điểm là 1 game thì chỉ cần 1 object duy nhất, có thể gọi từ bất cứ chỗ nào, thằng nào thích thì gọi. Singleton là một phương pháp lập trình trong đó đảm bảo việc khởi tạo đối tượng từ một class cho trước chỉ diễn ra một lần duy nhất trong toàn bộ quá trình chạy ứng dụng.
Một ví dụ đơn giản của singleton là PhysicEngine. Trong một Game Engine chỉ có duy nhất một Physic Engine chạy, nếu không Object sẽ không biết phải theo hướng dẫn của Engine nào. Bạn có thể kể tên một số singleton khác rất dễ thấy như là ScoreManager, LevelBuilder, PlayerController (trừ trường hợp game hỗ trợ nhiều người chơi trên cùng 1 máy) …
Với những thằng như EnergyCount (bộ đếm lượt chơi), NetworkManager,… thường có các thông số cần giữ lại, nên khi object mới của singleton được tạo ra nếu instance đã tồn tại nó sẽ hủy object mới
public class EnergyCount: MonoBehaviour { private static EnergyCount instance; public static EnergyCount Instance { get { return instance; } } //đảm bảo không set được chỉ get thôi void Awake() { if (instance != null) Destroy (this.gameObject); //đã có instance -> hủy object mới tạo else { instance = this; DontDestroyOnLoad (gameObject); } } protected void OnDestroy () { //Nhớ giải phóng vì đây là static if (Instance == this) { instance = null; } } //... }
Với những đối tượng đơn giản kiểu popupThongBao, LockScene,… thì có thể tạo instance mới thay thế cho cái cũ
public class ThongBao: MonoBehaviour { private static ThongBao instance; public static ThongBao Instance { get { return instance; } } //đảm bảo không set được chỉ get thôi void Awake() { if (instance != null) Destroy (instance.gameObject); //hủy instance cũ nếu có instance = this; DontDestroyOnLoad (gameObject); } protected void OnDestroy () { //Nhớ giải phóng vì đây là static if (Instance == this) { instance = null; } } //... }
Thêm bình luận