Sách trắng lag game › Tra theo triệu chứng
Không hiển thị·đối tượng ma: 20 nguyên nhân và đội phụ trách
Tên gọi khác: không thấy NPC, nhân vật vô hình, quái đã chết vẫn đứng đó
Mở từ điển triệu chứng gốc có hình minh họa →
NPC, quái hay người chơi lẽ ra phải có thì chỉ riêng màn hình của bạn không có, hoặc đối tượng đã biến mất vẫn còn trên màn hình của riêng bạn.
Người khác đang nói chuyện với NPC còn bạn chỉ thấy khoảng đất trống. Có bảng tên mà không có model nhân vật, hoặc có con quái đứng đó đánh không phản ứng.
Tình trạng này thường do thiếu một gói tin hoặc vẽ thất bại, ít liên quan đến tốc độ. Hãy xem khác kênh hoặc khác phasing, mất thông báo xuất hiện hay rời đi, bị hủy trong lúc loading, tải asset thất bại. Manh mối quyết định là khi đi ra khỏi tầm nhìn rồi quay lại thì đối tượng có hiện ra hay không.
Nguyên nhân gây ra triệu chứng này
L1 Tiến trình game phía client
- Ổ lưu trữ chậm khiến streaming asset không theo kịp: Trên ổ lưu trữ chậm như HDD, tốc độ đọc texture và model của thế giới mở không theo kịp tốc độ di chuyển, nên đối tượng hiện ra muộn hoặc game giật vì phải chờ đọc xong. (Phát triển client (Đội phát triển game))
L8 Socket và giao thức
- Keepalive mặc định 2 giờ: Khi bên kia biến mất mà không gửi tín hiệu đóng kết nối, rất lâu sau TCP mới phát hiện. Keepalive (tính năng của TCP kiểm tra xem kết nối nhàn rỗi còn sống không) mặc định tắt, và dù có bật thì kết nối cũng phải nhàn rỗi 2 giờ mới bắt đầu kiểm tra. (Phát triển server (Đội phát triển game))
- Slow start sau thời gian nhàn rỗi: Khi kết nối nhàn rỗi một lúc, TCP thu nhỏ lại cửa sổ tắc nghẽn (lượng dữ liệu gửi được trong một lần), nên khi đột ngột gửi dữ liệu lớn, TCP phải chia ra gửi nhiều lượt. (Hạ tầng server (Đội hạ tầng))
Sự cố chỉ một số người gặp
- Khác kênh, instance hoặc phasing: Nếu hai nhân vật ở khác kênh hoặc khác instance, hoặc ở “phasing” khác nhau (NPC hiển thị khác nhau tùy tiến độ nhiệm vụ), hai bên sẽ thấy hai thế giới khác nhau. (Phát triển server (Đội phát triển game))
- Bỏ thông báo xuất hiện tới trong lúc loading: Ngay khi nhân vật vào zone, server gửi thông báo xuất hiện của các NPC xung quanh, nhưng client vẫn đang tải bản đồ nên bỏ thông báo đó đi. (Phát triển client (Đội phát triển game))
- Thứ tự đăng ký tầm nhìn bị rối: Nếu thời điểm nhân vật được đăng ký vào lưới tầm nhìn trùng với thời điểm NPC chuyển ô lưới, thông báo xuất hiện của NPC đó có thể bị sót. (Phát triển server (Đội phát triển game))
- Mất snapshot gốc (baseline): Với cách server chỉ gửi “những gì khác so với lần trước”, nếu mất thông tin đầy đủ (bản gốc) gửi một lần lúc đầu thì các phần thay đổi sau đó không thể áp dụng được. (Phát triển server (Đội phát triển game))
- Mất thông báo rời đi (đối tượng ma): Ngược lại, nếu bỏ lỡ thông báo “đã biến mất”, NPC hoặc người chơi đã chết hay đã rời đi vẫn còn trên màn hình của riêng bạn. (Phát triển server (Đội phát triển game))
- Mất thông tin xuất hiện dồn tới ngay sau khi vào: Ngay khi nhân vật bước vào zone, server gửi cùng lúc thông tin xuất hiện của vài chục đến vài trăm đối tượng xung quanh. Nếu gửi chúng qua kênh không tin cậy (unreliable), hoặc bộ đệm nhận bị tràn trong lúc client đang loading nên không đọc socket, một phần sẽ biến mất và không được gửi lại. (Phát triển server (Đội phát triển game))
- Nhầm lẫn do dùng lại ID đối tượng: Khi NPC đã chết xuất hiện lại mà server dùng lại cùng ID đối tượng, client đã bỏ lỡ thông báo rời đi trong khoảng đó sẽ nhầm NPC mới là NPC cũ. (Phát triển server (Đội phát triển game))
- Xung đột cổng UDP cố định: Nếu client được viết để dùng một cổng cục bộ cố định, client thứ hai trên cùng PC sẽ không dùng được cổng đó hoặc phải chia gói tin nhận được với client thứ nhất. (Phát triển client (Đội phát triển game))
- Lỗi phân biệt phiên theo IP hoặc thiết bị: Nếu server hoặc server trung gian phân biệt kết nối bằng IP hay ID thiết bị, hai client trên cùng một PC (cùng IP công cộng) sẽ bị coi là một người. (Phát triển server (Đội phát triển game))
- Giới hạn chạy nhiều client: Nếu module bảo mật hoặc chính sách server giới hạn nhiều client trên một PC, client thứ hai sẽ bị chặn chạy hoặc chặn kết nối, hoặc client bật trước bị mất kết nối. Một số game chỉ chặn tính năng của client chạy thêm. (Phát triển client (Đội phát triển game))
- Giới hạn xử lý ở cửa sổ chạy nền: Với client ở cửa sổ chạy nền, game, engine và OS đều giảm khung hình và việc xử lý. Gói tin nhận được không được xử lý kịp nên bị dồn lại hoặc tràn. (Phát triển client (Đội phát triển game))
- Xung đột khi cùng truy cập file cache hoặc asset: Nếu hai client cùng ghi vào một thư mục cache hoặc khóa file, một bên sẽ không tải được model, texture của NPC. (Phát triển client (Đội phát triển game))
- Streaming thất bại do thiếu bộ nhớ hoặc VRAM: Khi hai client dùng chung bộ nhớ đồ họa, không còn chỗ để nạp model, texture mới cần dùng nên một phần không được vẽ. (Phát triển client (Đội phát triển game))
- Khác tùy chọn hiển thị: Nếu các tùy chọn như giới hạn số người hiển thị, ẩn bảng tên hoặc model NPC, chế độ cấu hình thấp khác nhau giữa hai client, những gì nhìn thấy sẽ khác nhau. (Phát triển client (Đội phát triển game))
- Phiên bản hoặc dữ liệu client không khớp: Nếu client thứ hai là bản cài đặt khác hoặc chưa cập nhật xong, nó không biết ID NPC mới mà server gửi nên âm thầm bỏ qua. (Phát triển client (Đội phát triển game))
- Ngân sách gửi và mức ưu tiên theo kết nối: Nếu server đặt giới hạn lượng gửi cho từng kết nối và gửi những thứ ở gần trước, bên có giới hạn thấp sẽ nhận NPC ở xa muộn hoặc không nhận được. (Phát triển server (Đội phát triển game))
- Đối tượng bị giữ lại do ước tính đồng hồ sai: Nếu giờ server mà client ước tính bị sai, client sẽ giữ lại thông tin đối tượng vừa tới vì cho là “vẫn còn ở tương lai”, hoặc bỏ đi vì cho là “quá cũ”. (Phát triển client (Đội phát triển game))
Xem từ điển triệu chứng gốc có hình minh họa