Cập nhật so với Cập nhật cố định

Trong Unity, cả hai hàm Cập nhật và FixedUpdate đều đượ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ự nhau nhưng có những điểm khác biệt chính giữa hai hàm này.

'Update'

Hàm 'Update' được gọi một lần trên mỗi khung và lý tưởng để xử lý input, cập nhật đối tượng positions và thực hiện hầu hết các tác vụ có mục đích chung. Nó 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'.

'FixedUpdate'

Hàm 'FixedUpdate' được gọi vào các khoảng thời gian cố định, giúp hàm này phù hợp để xử lý các phép tính liên quan đến vật lý. Nó độc lập với tốc độ khung hình, đảm bảo hoạt động nhất quán trên các thiết bị và tốc độ khung hình khác nhau.

void FixedUpdate()
{
    // Physics calculations
    rb.AddForce(transform.forward * forceMagnitude);
    
    // Other physics-related tasks
    // ...
}

Trong ví dụ trên, chúng ta tác dụng một lực không đổi lên thành phần Rigidbody theo hướng về phía trước của vật thể. Việc sử dụng 'FixedUpdate' đảm bảo rằng các phép tính vật lý diễn ra ở tốc độ cố định, bất kể tốc độ khung hình. Điều này rất quan trọng để duy trì mô phỏng vật lý ổn định.

'Update' so với 'FixedUpdate'

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

  • 'Update' được gọi một lần trên mỗi khung hình, trong khi FixedUpdate được gọi vào các khoảng thời gian cố định.
  • 'Update' phụ thuộc vào tốc độ khung hình, trong khi FixedUpdate không phụ thuộc vào tốc độ khung hình.
  • '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, di chuyển đối tượng và các hoạt động không liên quan đến vật lý.
  • FixedUpdate được thiết kế đặc biệt để tính toán liên quan đến vật lý, chẳng hạn như tác dụng lực, điều chỉnh các thuộc tính của vật cứng và thực hiện các hoạt động dựa trên vật lý khác.

Phần kết luận

Điều quan trọng cần lưu ý là 'Update''FixedUpdate' có thể cùng tồn tại trong cùng một tập lệnh, cho phép tách mã liên quan đến vật lý khỏi mã có mục đích chung khác. 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 đảm bảo hoạt động trơn tru và nhất quán trong các dự án Unity.