Cập nhật so với Cập nhật muộn

Trong Unity, các hàm Cập nhật và LateUpdate thường được sử dụng để cập nhật behavior của các đối tượng trong một cảnh và mặc dù chúng phục vụ các mục đích tương tự nhưng có những khác biệt chính giữa hai.

'Update'

Hàm 'Update' được gọi một lần trên mỗi khung và được sử dụng cho hầu hết các tác vụ có mục đích chung, chẳng hạn như xử lý input và đối tượng movement. Điều quan trọng cần lưu ý là 'Update' không phụ thuộc vào tốc độ khung hình, nghĩa là nó có thể thay đổi về thời gian thực hiện tùy thuộc vào hiệu suất.

void Update()
{
    // Input handling
    float horizontalInput = Input.GetAxis("Horizontal");
    float verticalInput = Input.GetAxis("Vertical");
    
    // Movement
    Vector3 movement = new Vector3(horizontalInput, 0, verticalInput);
    transform.Translate(movement * speed * Time.deltaTime);
    
    // General-purpose tasks
    // ...
}

Trong ví dụ trên, chúng ta truy xuất đầu vào từ trục ngang và trục dọc và sử dụng nó để điều khiển chuyển động của đối tượng. Phương thức 'Translate' được sử dụng để di chuyển đối tượng theo hướng đã chỉ định với tốc độ không đổi. Các tác vụ có mục đích chung cũng có thể được thực hiện trong hàm 'Update'.

'LateUpdate'

Hàm 'LateUpdate' cũng được gọi một lần trên mỗi khung, nhưng nó được thực thi sau khi tất cả các hàm 'Update' đã được hoàn thành. Nó thường được sử dụng để đảm bảo rằng các cập nhật khác, như đối tượng movement hoặc hoạt ảnh, đã hoàn tất trước khi thực hiện các hành động bổ sung phụ thuộc vào các cập nhật đó.

void LateUpdate()
{
    // Camera follow
    Vector3 desiredPosition = target.position + offset;
    transform.position = Vector3.Lerp(transform.position, desiredPosition, smoothness);
    
    // Additional actions after other updates
    // ...
}

Trong ví dụ trên, hàm 'LateUpdate' được sử dụng để theo dõi một cách trơn tru đối tượng mục tiêu bằng máy ảnh. Nó đảm bảo rằng vị trí của máy ảnh được cập nhật sau khi chuyển động của mục tiêu được xử lý trong các chức năng 'Update'. Các hành động bổ sung phụ thuộc vào vị trí cập nhật của đối tượng cũng có thể được thực hiện trong 'LateUpdate'.

'Update' so với 'LateUpdate'

Sự khác biệt chính giữa các hàm 'Update'LateUpdate:

  • 'Update' được gọi đầu tiên trong khung, theo sau là LateUpdate.
  • 'Update' phù hợp với hầu hết các tác vụ có mục đích chung, bao gồm xử lý đầu vào, đối tượng chuyển động và các hoạt động không liên quan đến máy ảnh.
  • LateUpdate thường được sử dụng cho các tác vụ liên quan đến máy ảnh, chẳng hạn như theo dõi một đối tượng mục tiêu một cách trơn tru hoặc thực hiện các hành động phụ thuộc vào các bản cập nhật khác.
  • Việc sử dụng LateUpdate giúp đảm bảo rằng các hành động phụ thuộc vào các bản cập nhật khác sẽ diễn ra sau khi các bản cập nhật đó được xử lý.

Phần kết luận

Điều đáng lưu ý là cả 'Update''LateUpdate' đều có thể cùng tồn tại trong cùng một tập lệnh, cho phép phân tách các loại cập nhật khác nhau. Hiểu được sự khác biệt và sử dụng chức năng thích hợp trong từng ngữ cảnh sẽ giúp đạt được hành vi mong muốn trong các dự án Unity.