Các đối tượng tĩnh lớn như môi trường được truyền từ máy chủ đến máy khách trong các trò chơi nhiều người chơi hiện đại phải không?


18

Tôi có một hệ thống có thẩm quyền, khi người chơi tham gia trận đấu, nó sẽ nhận được tất cả các đối tượng đã sinh ra - sinh ra trên chính nó (máy khách).

Nó trông như thế này:

  1. Client gửi mã thông báo truy cập đến Server
  2. Client nhận được sự chấp nhận từ Server
  3. Client chuyển cảnh sang cảnh trò chơi
  4. Servergửi người chơi, thùng, đồ vật bạn có thể tương tác để clientcó thể sinh sản và hiển thị chúng.

Nhưng những gì về các đối tượng mặt đất? Hiện tại, tôi có cùng một cảnh chính xác trên máy chủ và máy khách - với một mặt phẳng tĩnh đóng vai trò là một tầng. Hiện tại tôi đang thêm công cụ mới, cây xanh, cầu thang và xây dựng mọi thứ cùng nhau.

Tôi nghĩ - chúng ta tốt. Nhưng môi trường không nên được đồng bộ hóa quá? Được nối mạng bằng cách nào đó? Thuộc sở hữu của máy chủ?

Hãy thực hiện League of Legends:

nhập mô tả hình ảnh ở đây

Đó là một môi trường tĩnh, có thể là một lưới kết hợp (cầu thang, cỏ, tường, cửa hàng). Nhưng nó thực sự được giữ trên máy khách hay nó được gửi bởi máy chủ trong màn hình tải?


1
Bạn thậm chí có thể nghĩ về nó từ điểm mà bạn có thể thêm giao diện tùy chỉnh cho các nhân vật và môi trường liên minh. Bạn không gửi chúng cho sever, chúng được hiển thị cục bộ, vì vậy sẽ rất hợp lý khi kết luận rằng chúng được lưu trữ và hiển thị cục bộ. Cũng như vậy, chúng không ảnh hưởng đến trò chơi, nếu bạn hỏi về va chạm, chúng là sự pha trộn giữa máy chủ và máy khách, để người chơi không thể gian lận và vượt qua các bức tường.
Mặt trăng thí sinh _Max_

Câu trả lời:


41

Đối với hầu hết các phần, không, tài sản nghệ thuật thuộc bất kỳ loại nào không được gửi thường xuyên trên mạng. Nói chung tất cả các khách hàng sẽ có cùng một tài sản nội dung tại địa phương. Có thể có mã để đảm bảo đây là trường hợp thông qua kiểm tra nội dung, hoặc tương tự. Nếu bạn lo lắng về việc người dùng giả mạo một số khách hàng nội dung của họ, bạn có thể triển khai một hệ thống tương tự.

Máy chủ có thể gửi chỉ thị đến máy khách cho biết nó sẽ hiển thị hoặc ẩn một số tài sản nhất định, nhưng nó sẽ không gửi dữ liệu thực tế của tài sản. Điều này, trong thực tế, quá lãng phí và chậm chạp, và có thể gây ra vấn đề thực sự với những người có dữ liệu hạn chế.

Trong một số trường hợp nhất định, các tài sản nhỏ hơn có thể được truyền toàn bộ nếu tài sản bằng cách nào đó được coi là "spoiler" hoặc bất cứ điều gì. Nhưng đó là không phổ biến. Nói chung những gì bạn thấy là một trò chơi có thể tải xuống nội dung mới từ một bản vá, hoặc bất cứ điều gì, nhưng điều đó sẽ chỉ xảy ra một lần, trong quá trình vá khi khởi động. Không phải trong quá trình chơi game.


21
Lưu ý rằng câu trả lời này chỉ giải quyết các tài sản tĩnh. Các tài sản do người chơi tạo / động (ví dụ: các khối thế giới Minecraft hoặc logo bang hội MMORPG mà người chơi có thể tải lên) sẽ phải được truyền đi. Nhưng ngay cả khi đó, người ta thường cố gắng giảm thiểu lượng dữ liệu cần thiết (để tiếp tục ví dụ Minecraft: gửi các bản cập nhật khối thay vì toàn bộ khối, chỉ cho biết loại / trạng thái khối và tọa độ đã thay đổi) và / hoặc lưu trữ dữ liệu ở phía máy khách .
hoffmale

@hoffmale Vâng, điểm tốt; câu hỏi đề cập đến cảnh quan là tĩnh tại cuối, vì vậy tôi không nghĩ sẽ nâng cao điểm đó, nhưng nó là một câu hỏi hay.

3
Nếu một tài sản là một spoiler, thông thường tài sản nằm trên máy khách, được mã hóa và khóa giải mã được truyền từ máy chủ đến máy khách khi cần tài sản.
Cấp cho Davis

4
Và ví dụ, nếu bạn cần đặt ngẫu nhiên các cây trên bản đồ, thay vì gửi tọa độ của các cây cho khách hàng, nó sẽ gửi hạt giống (của trình tạo số ngẫu nhiên) cho khách hàng.
Cấp cho Davis

5

Phụ thuộc vào một số yếu tố, bao gồm cả loại trò chơi (Tôi sẽ giả sử RTS ở đây, mặc dù MMO thế giới mở cũng xuất hiện trong tâm trí). Trạng thái địa hình cơ sở, người chơi cục bộ được gửi khi kết nối hoặc là một phần tài sản của khách hàng - nghĩ về một trò chơi RTS nơi bản đồ được vận chuyển cùng với khách hàng hoặc được tải xuống trước khi trò chơi bắt đầu.

Thật vậy, lưới thường sẽ không được gửi, vì nó đã có trên máy khách trong hầu hết các trường hợp RTS. Có hay không bản đồ va chạm, thứ thực sự quan trọng để giữ cho cả hai đồng bộ được gửi đi, là một câu hỏi khác. Nhưng trong hầu hết các RTS, điều này một lần nữa sẽ được lưu trữ trước trên máy khách.

Vì vậy, thực sự, tất cả phụ thuộc vào RTS của bạn đi kèm với gì, cho dù bạn tải xuống bản đồ trước thời gian chơi hay tại thời điểm trò chơi bắt đầu.

Sau đó, có một vài cách điển hình để duy trì đồng bộ hóa:

  • Deltas được gửi đến máy khách - cách phổ biến và hiệu quả nhất để giữ cho thế giới địa phương / máy khách được cập nhật với máy chủ;
  • Tổng kiểm tra đôi khi được gửi từ máy chủ đến máy khách hoặc máy khách đến máy chủ để đảm bảo rằng trạng thái thế giới thực sự phù hợp;
  • Đôi khi, trạng thái đầy đủ được bực bội để đồng bộ lại máy khách - thường là kết quả của các mối quan tâm kỹ thuật như trôi nổi điểm.

4

Đối với câu hỏi chính xác của bạn khi được hỏi, tôi không biết Liên minh huyền thoại xử lý cụ thể như thế nào. Tôi chưa bao giờ chơi trò chơi đó, vì vậy tôi không thể đề xuất liệu nó có cần hay không.

Nhưng câu trả lời cho câu hỏi của bạn, nói chung, khá đơn giản và dễ hiểu:

Nếu dữ liệu là tĩnh và bạn biết chắc chắn rằng nó sẽ không bao giờ thay đổi (thiếu các bản cập nhật toàn trò chơi định kỳ, nhưng đó là riêng biệt), vậy tại sao bạn lại muốn gửi thêm dữ liệu đó? Thông thường bạn cố gắng tránh gửi bất cứ điều gì có thể tránh được. Chỉ gửi dữ liệu nếu giao tiếp đó là một nhu cầu .

Mặt khác, nếu dữ liệu sẽ thay đổi theo thời gian , hoặc nếu bạn chỉ muốn để tùy chọn đó mở, thì bạn có thực sự có lựa chọn nào trong vấn đề này không? Đối với trường hợp này, bạn phải gửi dữ liệu. Nếu không, khách hàng không có những gì nó cần.

Điều này áp dụng cho tất cả các thông tin liên lạc mạng, không chỉ dữ liệu địa hình. Mọi thứ .


2

Không.

Tôi đã thực hiện một cách công bằng về việc đào sâu về nguồn gốc của Liên minh huyền thoại, và tất cả mọi thứ, bao gồm các mô hình Champion, Người bán hàng, nền bản đồ chung và các sinh vật lông tơ được thêm vào sau khi thực tế (như con sóc nhỏ trên một số tảng đá và một con ốc sên sông) được giữ ở phía khách hàng. Việc khách hàng có tất cả các mô hình này là một trong những lý do LoL có dung lượng lớn nhiều gigabyte.

Chuyển tất cả dữ liệu này từ máy chủ sang máy khách sẽ là điều tồi tệ, chưa kể nhai thông qua việc sử dụng băng thông chỉ để làm lại tất cả trò chơi tiếp theo.

Vậy nó được giải quyết như thế nào? Mỗi người chơi chỉ gửi CHỈ dữ liệu quan trọng cho những người chơi khác trong trò chơi đến máy chủ. Không ai cần biết liệu bạn còn 5 giây trên thời gian hồi chiêu hay không, hay Deep Terror Thresh Skin tạo ra bong bóng cho bạn. Những thứ được truyền qua trong trò chơi là những thứ như, Vel'Koz bỏ Q, Viktor di chuyển sang trái, v.v ...

Rõ ràng hơn, liên quan đến việc tải màn hình, khi bạn đưa lên, những thứ xảy ra có những thứ như miếng vá giữa, mà mọi người chơi cần nói chuyện với máy chủ của bạo loạn trước khi trò chơi bắt đầu, bắt tay kết nối an toàn và giao thức chống gian lận.

CHÚ THÍCH:

Nếu bạn muốn xem xét những thứ khách hàng có, và do đó, máy chủ không vượt qua bạn, hãy tìm thư mục C: \ Riot Games \ RADS \ lol_Game_Client \ Project (có thể là một chút thôi, xin lỗi tôi m đang xử lý bộ nhớ ngay bây giờ) và tìm một trình giải nén tệp .RAF trực tuyến. Sau đó, bạn có thể thấy tất cả những thứ được lưu trữ cục bộ như tải màn hình và họa tiết da, thậm chí là bộ xương vô địch.


1
Có vẻ như cách rõ ràng để thực hiện điều này là yêu cầu khách hàng (từ máy chủ tài sản chuyên dụng) bất kỳ tài sản nào mà nó không được lưu trữ cục bộ và khi nhận được chúng, nó sẽ thêm chúng (bán) vĩnh viễn vào nó lưu trữ liên tục cục bộ trên đĩa. Bằng cách đó, tài sản chỉ được tải xuống một lần và chỉ khi chúng thực sự cần thiết. (Khi đã hoạt động, tối ưu hóa sẽ là điền trước cửa hàng địa phương của khách hàng với các tài sản rất có thể cần thiết. Điều này sẽ giảm thời gian khởi động của trò chơi khi kết nối lần đầu, với chi phí làm cho gói trình cài đặt của trò chơi lớn hơn)
Jeremy Friesner

1
@JeremyFriesner Tại sao đó là cách rõ ràng? Điều đó nghe có vẻ tồi tệ hơn so với triển khai hiện tại được nêu trong bài đăng này, trong đó bạn đã cài đặt tất cả các tài sản trước thời hạn để bạn có sẵn chúng ngay lập tức khi bạn cần chúng. Nó có thể hoạt động ổn đối với một trò chơi một người chơi, mặc dù tôi nghĩ rằng nhiều người sẽ thích thời gian cài đặt lâu hơn (và sử dụng nhiều dung lượng đĩa hơn) hơn là phải liên tục chờ tải xuống các tài sản mới trong khi chơi.
Anthony Grist

2
Đối với một trò chơi nhiều người chơi? Thảm họa tuyệt đối. Bạn không muốn giữ mọi người chơi khác chờ đợi để bắt đầu trò chơi vì một người phải tải xuống một số tài sản mà họ chưa bao giờ cần cho đến bây giờ.
Anthony Grist

1
@AnthonyGrist Đó là lý do tại sao nhiều trò chơi như liên minh huyền thoại yêu cầu người chơi phải tải xuống tất cả tài sản trò chơi trước khi tham gia hàng đợi để tìm trận đấu. Điều này hoạt động tốt hơn nhiều so với độ trễ của trò chơi trong khi bạn chờ đợi một tài sản lớn sẽ hoạt động. Hãy nhớ rằng trong thế hệ trò chơi này, người chơi cảm thấy phấn khích khi giảm ping 10 ms và thường chơi với <50 ms ping và có thể biết liệu điều đó có nhảy tới phạm vi 100 đến 150 hay không. Chờ đợi để lấy một tài sản trong trò chơi sẽ là một thảm họa trong MOBA hoặc FPS và nếu nó xảy ra không đúng lúc, nó thậm chí có thể thay đổi kết quả của trò chơi.
JustWannaFly

@AnthonyGrist (tiếp theo) Tôi đoán bạn có thể nghĩ về nó như thế này. Trong một số trò chơi nhiều người chơi / cạnh tranh, người chơi giao dịch thời gian tải / vá / cài đặt lâu hơn để có trải nghiệm chơi trò chơi thời gian thực hơn bằng cách để khách hàng chăm sóc tất cả các cập nhật và xếp hàng. Điều này khiến người chơi cụ thể cần tài sản phải chờ đợi trừ khi anh ta muốn tham gia một bữa tiệc, sau đó tất cả người chơi trong nhóm sẽ phải chờ để vào hàng đợi để tìm đối thủ
JustWannaFly

1

Một ví dụ về nơi mà điều này không được thực hiện là Elder Scrolls Online, nơi nó tin tưởng khách hàng về độ cao của mặt đất .

Những người khai thác vàng đã hạ thấp mặt đất vài feet. Sau đó, họ có thể đi bộ xung quanh "dưới" địa hình và khai thác tài nguyên từ bên dưới mà không bị PC hoặc NPC tấn công.

Các chỉnh sửa tương tự cho phép chúng làm phẳng các vách đá để chúng có thể đi lên, gỡ bỏ hoặc định tuyến dưới các bức tường tĩnh, nhìn xuyên qua tất cả các vật thể tĩnh, v.v.

Về cơ bản, máy chủ đã tin tưởng khách hàng về vị trí của người chơi, việc tính toán va chạm ở phía máy chủ cho mỗi người chơi chống lại tất cả các thống kê sẽ khá nặng nề.

Tuy nhiên, trong các trò chơi dựa trên ô xếp như Furcadia, điều đó khác: mọi ô vuông bạn di chuyển đều có khả năng đi bộ phía máy chủ và máy chủ không cần tin tưởng vào máy khách bất cứ điều gì: máy chủ biết và xác thực mọi chuyển động và hành động của người dùng, và máy khách chỉ hiển thị hành động khi máy chủ báo cho nó kết quả.


1
TL; DR: Luôn luôn giả định rằng khách hàng là một nói dối, gian lận, chim bảo . Nhưng máy chủ xác nhận mọi thứ làm giảm năng lực của bạn.
Draco18
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.