U
tab 01Căn bản11 bài — chạm để mở
02 / 11 · 5 phút
Căn bản

Hàm và vòng lặp game

dự án của bạn tới lúc này

Vẫn chưa có dự án. Bạn đang học ba hàm mà Unity tự gọi giúp bạn — từ bài 06 trở đi bạn sẽ thấy chúng chạy.

Hàm là một khối code có tên mà bạn có thể cho chạy. Unity tự động gọi giúp bạn ba hàm quan trọng.

sơ đồ động

Awake và Start chạy một lần, lúc đối tượng vừa được tạo ra. Update chạy đi chạy lại, khoảng 60 lần mỗi giây.

Ba hàm bạn viết mỗi ngày

Lifecycle.cs
void Awake()  { /*tự chuẩn bị */ }
void Start()  { /*lúc này mọi thứ đã có */ }
void Update() { /*chạy mỗi khung hình */ }
  • void nghĩa là hàm không trả về gì. Cặp ( ) chứa tham số đầu vào — ở đây để trống.

  • Awake chạy trước Start trên mọi đối tượng, nên trong Start bạn dùng được đối tượng khác.

  • Update là vòng lặp game: đọc phím, di chuyển, đếm giờ, kiểm tra điều kiện.

Time.deltaTime — quy tắc duy nhất của Update

Máy mạnh gọi Update nhiều lần hơn điện thoại yếu. Nhân với Time.deltaTime (số giây kể từ khung hình trước) giúp tốc độ di chuyển giống nhau trên mọi máy.

sơ đồ động

Mỗi ô là một lần Update() được gọi. Nửa trên cộng 5 HP cho mỗi lần gọi, nên máy mạnh kết thúc giây ở mức 50 HP; nửa dưới cộng 5 HP × deltaTime, nên cả hai hàng đều dừng ở đúng 5 HP.

✖ 3 units per frame

3 đơn vị mỗi khung hình

phụ thuộc tốc độ khung hình
transform.position += Vector3.forward * 3f;

✓ 3 units per second

3 đơn vị mỗi giây

ổn định
transform.position += Vector3.forward * 3f * Time.deltaTime;

Tự viết một hàm

Damage.cs
int hp = 100;

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
        TakeDamage(20);            // gọi hàm
}

void TakeDamage(int amount)        // tham số đầu vào
{
    hp -= amount;
    Debug.Log("HP left: " + hp);   // in ra Console
}