ASCENO
Loading Asceno
Asceno
UnityBài 1417/09/2026Asceno

Start, Awake và OnEnable khác nhau thế nào?

Awake, OnEnable và Start đều thuộc vòng đời MonoBehaviour nhưng có thời điểm và mục đích khác nhau. Phân biệt chúng giúp script khởi tạo ổn định khi object bật/tắt, instantiate hoặc được load từ Scene. Bài dùng một object có thể bật tắt để quan sát log theo thứ tự. Từ đó bạn có quy tắc thực dụng: Awake cho dữ liệu nội bộ, OnEnable cho mỗi lần bật, Start cho bước cần các object khác đã được tạo.

ASCENO / UNITY STUDY NOTES · 16

Start, Awake và OnEnable khác nhau thế nào?

What Is the Difference Between Start, Awake, and OnEnable?

Bài học bắt đầu bằng một ảnh chụp trực tiếp từ Unity để người đọc biết thao tác thực hành. Chín hình sau là minh họa không chữ; phần giải thích song ngữ bên dưới mới là nội dung cần đọc. Chủ đề chính là awake vs start unity. Ảnh số 1 là bằng chứng thực hành; ảnh số 2–10 chỉ dùng hình khối, biểu tượng và quan hệ trực quan để có thể giữ nguyên khi chuyển sang ngôn ngữ khác.

Mục tiêu học tập

  • Giải thích được khái niệm bằng mô hình hoặc luồng dữ liệu.
  • Biết chính xác màn hình Unity nào cần mở.
  • Dự đoán kết quả trước khi bấm Play và tìm được bằng chứng.
  • Tự dựng lại thí nghiệm nhỏ và xử lý lỗi có phương pháp.

1. Thực hành trực tiếp trong Unity

Mở đúng Scene test, chọn object liên quan và thực hiện thao tác được mô tả trong bài. Hình này là ảnh Unity native để người đọc nhận ra nơi bắt đầu; các bước và ý nghĩa nằm trong phần chữ ngay bên dưới.

Start, Awake và OnEnable khác nhau thế nào? — native Unity practice
Hình 1/10 — Ảnh chụp trực tiếp Unity: điểm bắt đầu của phần thực hành.

2. Minh họa hệ thống

Awake, OnEnable và Start đều thuộc vòng đời MonoBehaviour nhưng có thời điểm và mục đích khác nhau. Phân biệt chúng giúp script khởi tạo ổn định khi object bật/tắt, instantiate hoặc được load từ Scene. Hình minh họa bên dưới không chứa câu chữ để không bị khóa vào một ngôn ngữ; hãy đọc phần giải thích này cùng các bước cụ thể.

  • Awake | một lần khi instance được tạo | cache component, chuẩn bị dữ liệu nội bộ | không giả định object khác đã sẵn sàng
  • OnEnable | mỗi lần component active | đăng ký event, bật listener | phải đi cùng OnDisable
  • Start | một lần trước frame đầu tiên | logic cần chờ các object trong Scene | không dùng cho việc cần chạy mỗi lần bật
Start, Awake và OnEnable khác nhau thế nào? — language-neutral system illustration
Hình 2/10 — Minh họa hệ thống không chữ; phần giải thích nằm trong nội dung bên trên và bên dưới ảnh.

3. Minh họa nguyên nhân → kết quả

Hãy đọc hướng mũi tên, vị trí tương đối và thay đổi của biểu tượng như một quan hệ nhân quả. Không cần dựa vào chữ nằm trong ảnh; phần dưới đây giải thích từng bước bằng văn bản.

  1. Load/Instantiate
  2. Awake (1 lần)
  3. OnEnable (mỗi lần bật)
  4. Start (1 lần)
  5. Disable → OnDisable
  6. Enable → OnEnable
Start, Awake và OnEnable khác nhau thế nào? — language-neutral cause and result illustration
Hình 3/10 — Minh họa nguyên nhân → kết quả bằng biểu tượng và mũi tên.

4. Minh họa trình tự hoạt động

Trong Unity, mở Console và bật Clear trước khi test. Tạo một GameObject có script LifecycleOrder, chạy Play để đọc thứ tự, rồi bỏ Play và dùng checkbox Active để kiểm chứng vòng lặp bật/tắt.

Start, Awake và OnEnable khác nhau thế nào? — language-neutral sequence illustration
Hình 4/10 — Minh họa trình tự hoạt động; tên cửa sổ và thao tác được giải thích bằng văn bản.

5. Minh họa cấu trúc object

Đọc tên object trong Hierarchy trước. Nếu tên không nói lên vai trò, hãy đổi tên trong Scene test; screenshot chỉ có giá trị khi người đọc biết mình đang nhìn object nào.

Start, Awake và OnEnable khác nhau thế nào? — language-neutral object structure illustration
Hình 5/10 — Minh họa cấu trúc parent/child và object cần chọn.

6. Minh họa cấu hình

Chọn GameObject có LifecycleOrder trong Hierarchy. Inspector phải hiển thị script đã gắn; nếu script không xuất hiện, Unity chưa compile hoặc file/class name không khớp.

Start, Awake và OnEnable khác nhau thế nào? — language-neutral configuration illustration
Hình 6/10 — Minh họa các giá trị cấu hình và reference; vị trí cụ thể được chỉ trong phần chữ.

7. Minh họa quan sát kết quả

Lần chạy đầu: Awake → OnEnable → Start. Tắt object: OnDisable. Bật lại: OnEnable. Không có Awake/Start lần hai; đó là bằng chứng để phân biệt callback chứ không phải thứ tự vẽ minh họa.

Start, Awake và OnEnable khác nhau thế nào? — language-neutral observation illustration
Hình 7/10 — Minh họa quan sát input, log, trạng thái và kết quả.

8. Minh họa code → state

Đừng chép code rời khỏi Scene. Trước mỗi dòng, chỉ ra object/reference đầu vào; sau mỗi dòng, chỉ ra state hoặc output nào phải thay đổi.

using UnityEngine;

public class LifecycleOrder : MonoBehaviour
{
    private void Awake() => Debug.Log("Awake");
    private void OnEnable() => Debug.Log("OnEnable");
    private void Start() => Debug.Log("Start");
    private void OnDisable() => Debug.Log("OnDisable");
}
Start, Awake và OnEnable khác nhau thế nào? — language-neutral state illustration
Hình 8/10 — Minh họa code tác động lên state và output; đoạn code thật được giải thích bằng văn bản.

9. Minh họa thí nghiệm

Bài dùng một object có thể bật tắt để quan sát log theo thứ tự. Từ đó bạn có quy tắc thực dụng: Awake cho dữ liệu nội bộ, OnEnable cho mỗi lần bật, Start cho bước cần các object khác đã được tạo.

  1. Chạy Play và chụp riêng ba dòng Awake, OnEnable, Start.
  2. Tắt GameObject trong Play Mode, ghi OnDisable rồi bật lại.
  3. Đưa một Debug.Log vào OnEnable và kiểm tra nó xuất hiện nhiều lần nhưng Start chỉ một lần.
  4. Đăng ký event trong OnEnable và huỷ trong OnDisable để tránh gọi handler trùng.
Start, Awake và OnEnable khác nhau thế nào? — language-neutral experiment illustration
Hình 9/10 — Minh họa thí nghiệm: một thay đổi, một dự đoán, một bằng chứng.

10. Minh họa lỗi → cách sửa

  • Đặt logic phụ thuộc object khác vào Awake rồi gặp reference chưa sẵn sàng.
  • Đăng ký event trong OnEnable nhưng quên huỷ trong OnDisable.
  • Tưởng Start chạy lại mỗi lần bật object.
  • Không xoá Console trước test nên đọc nhầm log của lần chạy trước.
Start, Awake và OnEnable khác nhau thế nào? — language-neutral correction illustration
Hình 10/10 — Minh họa đường sai → điểm kiểm tra → đường sửa; phần chữ nêu rõ từng lỗi.

Góc nhìn ASCENO: Một hình ảnh tốt phải giúp người đọc trả lời được một câu hỏi cụ thể. Nếu ảnh không cho biết chọn gì, nhìn ở đâu, đổi gì hoặc kết quả nằm ở đâu, ảnh đó chưa đủ điều kiện đưa vào tài liệu.