Giải pháp hiệu quả cho việc chia tay không gian nhiều người chơi?


10

Câu hỏi này hơi khó, nhưng tôi sẽ cố gắng làm cho nó rõ ràng.

Hãy nói rằng tôi đang xây dựng một trò chơi trực tuyến (không phải quy mô MMO), nhưng điều đó hỗ trợ càng nhiều người chơi càng tốt, theo cách tiếp cận máy chủ có thẩm quyền. Tôi muốn những thế giới thực sự rộng lớn với rất nhiều kẻ thù mô phỏng AI.

Tôi biết một vài chiến lược để tiết kiệm CPU máy chủ bằng cách chia nhỏ không gian và không xử lý những gì không cần xử lý. Tôi đã chia thế giới theo các khu vực, sẽ yêu cầu thời gian tải và chuyển tiếp nhỏ, điều mà tôi nghĩ là quan trọng để duy trì chất lượng trò chơi khi chơi cục bộ (một mình hoặc thậm chí với một vài người bạn). Tôi không hy vọng người chơi sẽ ở nhiều hơn một hoặc hai khu vực.

Vấn đề là một khu vực có thể trở nên khá lớn và có rất nhiều NPC mô phỏng cùng một lúc. Làm cách nào để xử lý việc này mà không ảnh hưởng đến trải nghiệm của người chơi? Các cách tiếp cận như một máy chủ cho mỗi vùng và giống nhau không có trong bảng.

Tôi chủ yếu tìm kiếm các cấu trúc dữ liệu để ngăn chặn kẻ thù và thậm chí là các NPC hòa bình. Để hoàn thiện câu hỏi, xin lưu ý rằng các phương tiện tồn tại, do đó việc di chuyển trong một khu vực rất nhanh, ảnh hưởng đến "khi nào" đến các khu vực tiêu hủy.


Bạn có bị hạn chế chỉ một máy chủ vật lý không?
Patrick Hughes

Cuối cùng, không. Nhưng vì lợi ích của cả sự đơn giản và khả thi, hiện tại, tôi không thể làm phức tạp dự án hơn nữa :)
Grimshaw

Bắt đầu đơn giản. Một cái gì đó giống như WoW hoạt động trên nhiều hộp vật lý trên mỗi "máy chủ" chỉ chia thế giới của chúng thành một lưới và tất cả các cập nhật đều dựa trên những người trong cùng một hộp với bạn. Rất đơn giản, dễ điều chỉnh, hoạt động tốt và bạn có thể sử dụng nó chỉ với một hộp của mình để kiểm soát xử lý.
Patrick Hughes

Tôi hoàn toàn đồng ý với quan điểm của bạn, và có lẽ tôi đã bỏ lỡ điều gì đó trong câu hỏi của mình. Điều gì xảy ra nếu có một người chơi ở bên phải của ô 'và một người chơi khác ở bên trái của ô bên phải? Họ nên gặp nhau! Thế giới sẽ tiếp tục cho một trò chơi như WoW .. Đây là điều tôi không hiểu, làm thế nào để tạo ra một mạng lưới thế giới liên tục, trong khi vẫn giữ cho nó hiệu quả? Chắc chắn có những tình huống khi người chơi từ hai "máy chủ" sẽ nhìn thấy nhau :)
Grimshaw

1
Và vâng, nếu bạn sẽ có cả hai thứ trên khắp và rất nhiều người chơi trên tất cả các bạn thực sự phải lập kế hoạch cho mọi thứ hoạt động ở mọi nơi và mọi lúc, không có cách nào kỳ diệu xung quanh đó. Đây là lý do tại sao các hộp duy nhất của nhóm máy chủ MMO chỉ phục vụ tối đa 200-500 người chơi VÀ tại sao MMO AI cho NPC lại ngu ngốc một cách thảm hại (còn gọi là giá rẻ để tính toán).
Patrick Hughes

Câu trả lời:


5

Từ những gì tôi hiểu, bạn sẽ có một số loại vật lý chạy trên máy chủ của bạn.

Nếu đó là trường hợp cũng có các kỹ thuật khác có sẵn cho AI / vật lý ngoài phân vùng không gian. Từ hầu hết đến ít rõ ràng hơn:

  • mức độ ưu tiên: Các NPC không có tương tác trực tiếp với người chơi có thể nhận được ít thời gian CPU hơn bằng cách giảm tốc độ làm mới của họ. Bạn có thể sử dụng hàng đợi ưu tiên và chạy hàng đợi với mức ưu tiên cao hơn từ đầu đến cuối, trong khi các hàng đợi khác sẽ chỉ chạy 1/2, 1/4 hoặc 1/8 của hàng đợi mỗi chu kỳ. bằng cách này, bạn đảm bảo mỗi đối tượng chạy tại một số điểm nhưng bạn giảm số lần nó tiêu thụ CPU.
  • vật lý cũng có thể được hạ xuống (chỉ có thể sử dụng các hộp va chạm và hình cầu trong khi chuyển vùng và tránh xa tầm nhìn).
  • đơn giản hóa AI / mô phỏng bằng cách phân bổ các hành vi rất cơ bản cho các NPC và môi trường trong khi người chơi ở xa. Thông thường, nó sẽ chuyển vùng hoặc quét kẻ thù thay vì săn bắn, hái lượm, canh tác ...
  • một số vật lý và AI cũng có thể được ủy quyền cho khách hàng. Nếu bạn thực sự thiếu CPU trên các máy chủ, bạn có thể gắn thẻ đối tượng là đã được giải quyết một phần và các máy khách sẽ điều chỉnh vật lý và vị trí của các đối tượng đó cục bộ (để tránh các NPC nổi). Các khách hàng có thể được giao một số trách nhiệm trong việc chạy AI (trong khi chiến đấu với người chơi, thiết bị của người chơi được nhắm mục tiêu có thể được chạy trực tiếp các NPC tấn công)
  • đối với người chơi, vật lý cũng có thể được hạ xuống trên máy chủ và khách hàng sẽ nhận được nhiều trách nhiệm hơn trong việc giải quyết va chạm. Ví dụ: bạn đánh một vật thể bằng xe của mình, máy chủ sẽ chỉ giải quyết vụ va chạm trên các hộp va chạm và gắn thẻ các vật thể có khả năng va chạm. Máy khách sẽ gửi độ phân giải đến máy chủ với dấu thời gian sẽ chấp nhận nó nếu các đối tượng được gắn thẻ và giải pháp có vẻ đúng.

Một khi bạn đã thực hiện các cơ chế này, bạn có thể quyết định mức độ và tần suất bạn cần chúng. Điều tuyệt vời ở đây là sau này bạn có thể thêm một vài máy chủ sẽ có thể đảm nhận một số nhiệm vụ thay vì các ứng dụng khách.

Tất nhiên việc phát hiện va chạm gần đúng sẽ tạo ra một số quang sai, nhưng bạn sẽ có thể giải quyết chúng bằng cách thêm độ chính xác theo thời gian.

Cũng liên quan đến vật lý, bạn nên xem libs hỗ trợ một số loại hệ thống GPGPU như OpenCL hoặc CUDA nếu bạn có quyền truy cập vào máy chủ hỗ trợ.


Kết hợp phân chia không gian của một khu vực với các bản cập nhật ưu tiên sẽ chính xác là những gì tôi cần, tối ưu cho số lượng người chơi ít và vẫn được tối ưu hóa khi có nhiều khu vực được tải. Cảm ơn.
Grimshaw

@DevilWithin Nó sẽ giúp ích, và nó không yêu cầu thay đổi về phía khách hàng. Tôi cũng đã thêm một vài chi tiết cho câu trả lời.
Coyote

AI đơn giản hóa là một ý tưởng tuyệt vời. Mặc dù NPC cách xa người chơi, nhưng họ không cần phải làm gì ngoài việc di chuyển trong hầu hết các trường hợp. Điều đó có nghĩa là tôi chỉ có thể làm gần đúng những gì họ dự định, cứ sau 1 phút hoặc một cái gì đó, chỉ để khiến họ lang thang khắp thế giới .. tưởng tượng họ là zombie, họ sẽ làm như vậy!
Grimshaw
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.