한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

Sách trắng lag game › L1 Tiến trình game phía client

Fixed timestep chạy bù mất kiểm soát Fixed-timestep catch-up / spiral of death

ID nguyên nhân cg-fixed-step · Phụ trách chính Phát triển client (Đội phát triển game)

Mở thẻ gốc có hình minh họa và thí nghiệm →

Sau một lần dừng, game dồn phần tính toán bị tồn lại để chạy bù, và chính phần tính toán đó lại làm game chậm tiếp.

Vì sao Mô phỏng game chạy theo bước thời gian cố định, rồi bị dừng một lần → Dẫn đến Dồn các bước bị tồn vào một khung hình để tính → Trên màn hình Các khung hình dài nối đuôi nhau gây giật, hoặc chạm giới hạn khiến cả thế giới chậm lại

Triệu chứng
Giật khựng, Tua nhanh, Quay chậm
Yếu tố
Ngưng trệ
Ai gặp phải
Chỉ mình tôi
Khi nào
Thỉnh thoảng bất chợt, Khi đông người
Phụ trách
Phụ trách chính Phát triển client (Đội phát triển game)
Việc cần làm (Đội phát triển game)
Giới hạn số bước chạy bù mỗi khung hình, phần thời gian còn dư xử lý bằng nội suy.
Trên đồ thị
Thỉnh thoảng vọt lên bất chợt · Frame time, số bước cố định mỗi khung hình
Chỗ cần xem
Trong profiler của bản build development, xem cùng lúc số bước cố định chạy trong một khung hình (với Unity là số marker của giai đoạn FixedUpdate như FixedBehaviourUpdate) và frame time
Đúng nếu
sau một khung hình dài là chuỗi khung hình dài chạy nhiều bước liền nhau; khi chạm giới hạn (Maximum Allowed Timestep của Unity) thì thời gian trong game trôi chậm hơn thực tế
Loại trừ nếu
khung hình dài chỉ xảy ra một lần rồi thôi → “Frame time vọt lên” hoặc “Thu gom rác (GC) phía client”
Cách kiểm tra
Cần log và chỉ số của server, client game
Tìm hiểu thêm
Phần tính vật lý của Unity (FixedUpdate) là ví dụ điển hình của bước cố định (mặc định 0,02 giây, 50 lần trong 1 giây). Maximum Allowed Timestep trong thiết lập Time (thời gian tối đa được chạy bù trong một khung hình, mặc định khoảng 0,33 giây) chính là giới hạn chạy bù. Khung hình dài hơn mức này thì phần thời gian vượt bị bỏ, và đồng hồ game chậm hơn thực tế đúng chừng ấy.

Nguồn

  1. Set fixed timestep to optimize physics simulation frequency Unity
    Fixed Timestep mặc định 0,02 giây (50 lần trong 1 giây); khung hình dài thì phải chạy nhiều bước vật lý trong một khung hình nên tải tăng
  2. Handling variation in time Unity
    Maximum Allowed Timestep mặc định 1/3 giây (0.3333333); dù dừng 1 giây, thời gian game chỉ trôi 0,333 giây. Đây là giới hạn chặn vòng luẩn quẩn các bước chạy bù lại làm game chậm thêm
  3. Profiler markers reference Unity
    FixedBehaviourUpdate: đoạn chạy MonoBehaviour.FixedUpdate; các marker vật lý được gọi trong giai đoạn FixedUpdate

Nguyên nhân nên xem cùng

Cùng tầng: L1 Tiến trình game phía client

Nguyên nhân ở tầng khác gây cùng triệu chứng (Giật khựng)

Xem thẻ gốc có hình minh họa và thí nghiệm