Time.deltaTime trong Unity là gì?

1. Frame và FPS

Frame là gì?

  • Một frame giống như một trang của flipbook.
  • Mỗi trang chứa một hình ảnh tĩnh. Khi các hình ảnh này được lật liên tục, chúng tạo cảm giác chuyển động.

FPS (Frames Per Second) là gì?

  • FPS là số frame được hiển thị mỗi giây.
  • Nó giống như tốc độ lật các trang trong flipbook.
    • Lật nhanh hơn: Chuyển động mượt mà hơn.
    • Lật chậm hơn: Chuyển động giật, không mượt.
  • Trong game, mỗi frame là một hình ảnh mà GPU hiển thị.
  • FPS thể hiện khả năng của phần cứng (CPU, GPU) xử lý và hiển thị các frame.

Ví dụ:

  • 15 FPS: Bạn lật 15 trang mỗi giây. Chuyển động trông hơi giật. 60 FPS: Bạn lật 60 trang mỗi giây. Chuyển động cực kỳ mượt mà.
  • Một game bắn súng chạy ở 30 FPS sẽ thấy hơi giật khi di chuyển. Cùng game đó chạy ở 60 FPS sẽ mượt mà hơn nhiều, mang lại trải nghiệm tốt hơn.

2. Time.deltaTime

Nếu không dùng DeltaTime

  • Nếu ta đặt hàm Translate() trong Update() để xe tiến lên, nó sẽ cập nhật vị trí của chiếc xe mỗi frame.
  • FPS càng cao (máy càng mạnh) thì Translate() để xe tiến lên càng nhiều lần, dẫn dến xe chạy càng nhanh. → Chúng ta không muốn vậy (Chứ nếu không thì game đua xe là pay to win rồi).
  • Vậy để đồng bộ tốc độ của xe, FPS càng cao (cập nhật càng nhiều) thì ta sẽ cho quãng đường đi mỗi frame của xe ngắn lại. Còn đối với máy có FPS thấp (cập nhật càng ít) thì ta sẽ cho quãng đường xe đi được mỗi frame dài hơn.

DeltaTime là gì?

  • Time.deltaTime đại diện cho khoảng thời gian (giây) giữa hai frame liên tiếp.
  • Nó giống như thời gian bạn mất để lật từ một trang sang trang kế tiếp trong flipbook.
Máy yếuMáy mạnh
FPS10100
Thời lượng mỗi frame1/10 = 0.1s1/100 = 0.01s
  • Máy mạnh → FPS cao → Thời lượng mỗi frame ngắn. Máy yếu → FPS thấp → Thời lượng mỗi frame dài.
  • Vậy để đồng bộ tốc độ giữa các máy, ta sẽ nhân tốc độ với thời lượng mỗi frame.
    • Máy mạnh quãng đường di chuyển trong 1 frame sẽ dài hơn.
    • Máy yếu quãng đường di chuyển trong 1 frame sẽ ngắn hơn.
  • Giả sử tốc độ xe là 10:
Máy yếuMáy mạnh
FPS10100
Thời lượng mỗi frame1/10 = 0.1s1/100 = 0.01s
Quãng đường di chuyển
trong 1 frame
10 * 0.1 = 110 * 0.01 = 0.1
Quãng đường di chuyển
trong 1 frame
10 * 0.1 * 10 = 1010 * 0.01 * 100 = 10
  • Vậy quãng đường đi được trong 1 giây ở máy nhanh và máy chậm là như nhau.

Dùng Time.deltaTime trong Unity

  • Thêm Time.deltaTime vào công thức Transform().
  • Điều chỉnh speed của xe cho phù hợp.