한국어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

Dự đoán phía client sai lệch Prediction mismatch / reconciliation

ID nguyên nhân cg-predict · Phụ trách chính Phát triển client (Đội phát triển game) · Phối hợp Phát triển server (Đội phát triển game)

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

Client của bạn đã cho nhân vật di chuyển trước, nhưng nếu server tính ra kết quả khác thì nhân vật của bạn bị kéo đi.

Vì sao Client cho di chuyển trước khi server xác nhận (dự đoán) → Dẫn đến Server tính va chạm, tốc độ di chuyển, buff theo cách khác, hoặc không nhận được lệnh → Trên màn hình Khi xác nhận về, nhân vật của bạn bị kéo ngược về sau

Triệu chứng
Kéo ngược
Yếu tố
Mất gói, Độ trễ
Ai gặp phải
Chỉ mình tôi
Khi nào
Khi di chuyển hoặc chuyển bản đồ, Thỉnh thoảng bất chợt
Phụ trách
Phụ trách chính Phát triển client (Đội phát triển game) · Phối hợp Phát triển server (Đội phát triển game)
Việc cần làm (Đội phát triển game)
Client: dùng chung code di chuyển với server, gửi lặp input (dư thừa), hiệu chỉnh mượt mà. Server: dùng chung code di chuyển với client, lọc input trùng theo số thứ tự input và chỉ xử lý một lần.
Con số tham khảo
Khoảng cách bị kéo là “thời gian lệch × tốc độ di chuyển”. Chỉ mất vài lệnh cũng đã 1–3 m.
Trên đồ thị
Thỉnh thoảng vọt lên bất chợt · Số lần hiệu chỉnh theo server (dự đoán sai)
Chỗ cần xem
Ghi lại số lần và khoảng cách hiệu chỉnh vị trí mà server gửi. Với Unreal: đếm lần server hiệu chỉnh bằng ClientAdjustPosition; với Unity Netcode for Entities: đếm lần phải quay lại tính lại vì dự đoán sai
Đúng nếu
hiệu chỉnh dồn vào lúc người chơi báo kéo ngược, khoảng cách hiệu chỉnh lặp lại ở mức lớn với một số buff, địa hình hoặc skill di chuyển nhất định
Loại trừ nếu
hiệu chỉnh chỉ dồn vào lúc mất gói nhiều → mất gói input (đường truyền). Không có hiệu chỉnh mà chỉ nhân vật khác trông bị kéo đi → “Ngoại suy quá mức (dead reckoning)”
Cách kiểm tra
Cần log và chỉ số của server, client game

Nguồn

  1. Introduction to prediction (Netcode for Entities 6.5) Unity
    Client và server dự đoán bằng cùng code mô phỏng; khi khác trạng thái server (dự đoán sai) thì quay lại tính lại và người chơi thấy được việc hiệu chỉnh
  2. Use the command stream to handle user inputs (Netcode for Entities 6.5) Unity
    Để phòng mất gói, gửi kèm input của vài tick trước cùng với input mới nhất
  3. Understanding Networked Movement in the Character Movement Component for Unreal Engine Epic Games
    Client di chuyển trước, server tái hiện cùng chuyển động đó; nếu vị trí khác nhau thì hiệu chỉnh bằng ClientAdjustPosition và áp dụng lại các chuyển động đã lưu

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 (Kéo ngược)

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