Awake và Start Tiêu chí Awake() Start() Thời điểm gọi Ngay khi script được nạp/khởi tạo (khi scene load hoặc Instantiate prefab) Khung hình đầu tiên khi component được enable sau Awake/ OnEnable Yêu cầu enable Gọi dù component bị Disable Chỉ gọi khi component Enable Mục đích chính Khởi tạo nội bộ: tạo dữ liệu, tìm & cache reference trong cùng GameObject Khởi tạo phụ thuộc ngoại: cần đảm bảo các đối tượng khác đã Awake xong Thứ tự giữa các object Không đảm bảo thứ tự Awake giữa các object khác nhau Không đảm bảo thứ tự Start giữa các object khác nhau Gọi lại khi Instantiate Có (mỗi lần Instantiate) Có (khi instance được enable và tới frame đầu) Best practice Cache component ( GetComponent), set giá trị mặc định, đăng ký dịch vụ/DI Kết nối hệ thống khác, subscribe event ngoài, logic cần đảm bảo đối tượng khác đã sẵn sàng Lưu ý Gọi API phụ thuộc đối tượng khác chưa sẵn sàng Công việc nặng mỗi frame; tránh dùng nếu chỉ cần ở Awake