Skip to main content

MonoBehaviour và ScriptableObject

Tiêu chí

MonoBehaviourScriptableObject

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: AwakeOnEnableStartUpdate… → OnDisable/OnDestroy

Theo Asset: tồn tại như file .asset; không có loop mặc định

Khởi tạo

Tạo qua AddComponent<T>() hoặc trên Prefab/Scene

Tạo file bằng Create > ScriptableObject hoặc CreateInstance<T>()

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

(Update, FixedUpdate, LateUpdate…)

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.