MonoBehaviour và ScriptableObject
Tiêu chí | MonoBehaviour | ScriptableObject |
|---|---|---|
Bản chất | Component gắn lên GameObject trong Scene/Prefab | Asset dữ liệu độc lập (không gắn GameObject) |
Vòng đời | Theo GameObject: | Theo Asset: tồn tại như file |
Khởi tạo | Tạo qua | Tạo file bằng Create > ScriptableObject hoặc |
Chứa gì | Logic/Hành vi + tham chiếu Component/Transform trong Scene | Dữ liệu; có thể chứa logic nhẹ (không phụ thuộc Scene) |
Update loop | Có ( | Không |
Serialization | Serialize theo Scene/Prefab | Serialize thành asset; dễ chia sẻ giữa nhiều scene |
Tham chiếu Scene | Truy cập trực tiếp GameObject/Component | Không nên giữ tham chiếu trên scene (dễ null/leak); giữ data thuần |
Dùng lại/chia sẻ | Instance gắn với từng GameObject | Một asset dùng cho nhiều đối tượng/scene (data-driven) |
Bộ nhớ/GC | Tạo/hủy theo vòng đời object trong Scene | Ít cấp phát runtime; phù hợp giảm trùng lặp dữ liệu |
Use-case chính | Controller, behaviour, input, AI, UI view, spawn… | Config, stat, item database, lookup table, event channel, state container |
Làm việc trong Editor | Thường test trong Play Mode | Dễ chỉnh sửa/so sánh như asset |
Phụ thuộc | Phụ thuộc Scene/Prefab hierarchy | Độc lập với Scene; tốt cho DI/data pipeline |
Hạn chế | Khó chia sẻ state giữa nhiều scene nếu không singleton/DI | Không có lifecycle update; không tham chiếu scene trực tiếp |
Dùng khi | Cần logic chạy mỗi frame, tương tác thế giới | Cần dữ liệu chung/cấu hình tái sử dụng, tách data khỏi logic. |
No comments to display
No comments to display