Trong quá trình phát triển game với Unity Engine, phương thức Start
được dùng trong các trường hợp khởi tạo giá trị, khởi tạo đối tượng, … như là một phương thức thiết lập ban đầu. Phương thức Awake
cũng thường được sử dụng như 1 sự khởi đầu nhưng có chút khác biệt.
MonoBehaviour.Awake()
Awake
là phương thức được tự động gọi khi Script component được nạp. Awake
chỉ được gọi duy nhất 1 lần. Phương thức này được dùng để khởi tạo bất cứ biến nào hoặc trạng thái game trước khi game bắt đầu.
Phương thức Awake
được gọi sau khi tất cả các đối tượng được khởi tạo vì thế có thể giao tiếp với các đối tượng khác hoặc truy vấn chúng.
Mỗi hàm Awake
của đối tượng trong game được gọi với thứ tự ngẫu nhiên giữa các đối tượng. Bởi vì điều này, có thể sử dụng Awake
để thiết lập tham số giữa các Script component và dùng Start
để chuyển bất kì tham số nào qua lại giữa chúng. Awake
luôn được gọi trước Start
, điều này cho phép có sắp xếp thứ tự khởi tạo của Script.
Awake không thể là 1 co-routine.
MonoBehaviour.Start()
Start
được gọi trước lần gọi Awake
đầu tiên ngay tại frame Script component được bật. Cũng giống như Awake
, Start
được gọi duy nhất 1 lần.
Tuy nhiên, Awake
được gọi khi đối tượng được khởi tạo, bất kể Script component có được bật hay tắt. Start
có thể không được gọi trên cùng 1 frame với Awake
nếu Script component không được bật ở thời điểm khởi tạo.
Awake và Start
Về cơ bản, Awake
và Start
là 2 phương thức được tự động gọi khi Script component được nạp. Awake
được gọi đầu tiên ngay cả khi Script component không được bật và được dùng tốt nhất là để thiết lập các tham số giữa Script
và việc khởi tạo. Start
được gọi sau Awake
và trước lần gọi Update
đầu tiên nhưng chỉ khi Script component được bật.
Ví dụ: Trong scene, GameObject
có Script component:
using UnityEngine; public class AwakeStartTester : MonoBehaviour { void Awake() { Debug.Log("Awake called"); } void Start() { Debug.Log("Start called"); } }
Nhấn Play game và kết quả:

Điều này có nghĩa là dùng Start
cho những mong muốn thực thi khi Script component được bật, nó cho phép trì hoãn bất cứ phần nào của việc khởi tạo cho đến khi điều đó thật sự cần thiết.
Lưu ý
Phương thức Awake
của tất cả đối tượng trong scene được gọi trước bất kì phương thức Start
của bất kì đối tượng nào.
Ví dụ: Trong scene, có 2 đối tượng GameObjectA
và GameObjectB
đều có Script component:
using UnityEngine; public class AwakeTester : MonoBehaviour { void Awake() { Debug.Log("Awake() was called form " + this.name); } void Start () { Debug.Log("Start() was called form " + this.name); } }
Nhấn Play, có đoạn Log như sau:

Điều này hữu ích khi việc khởi tạo GameObjectA
phải dựa vào GameObjectB
đã được khởi tạo hay chưa, việc khởi tạo GameObjectB
nên được hoàn thành ở phương thức Awake
trong khi việc GameObjectA
nên hoàn thành ở Start
.
- Trong trường hợp các đối tượng được tạo ra trong suốt quá trình chơi game, phương thức
Awake
của chúng sẽ được gọi tự động ngay sau khi phương thứcStart
của scene được hoàn thành.