Хранение координат каждого объекта на стороне сервера в MMO

12

В MMORPG:

Типично или целесообразно хранить координаты каждого дерева, кустарника и т. Д. На стороне сервера для обнаружения столкновений?

Если это так, каков был бы возможный способ хранения такого огромного количества координат (структуры данных и тому подобное, обработка проблем производительности)?

Если нет, выполняется ли этот тип обнаружения столкновений полностью на стороне клиента, а сервер вообще не проверяет?

Или есть середина: клиент проверяет коллизию, а сервер проверяет? Если так, то как сервер будет проверять то же самое, не сохраняя координаты на сервере?

Саджит Дильшан Джамал
источник
2
Я не знаю достаточно об этом, чтобы дать хороший ответ, но если вы делаете обнаружение столкновений только на стороне клиента, читеры найдут способ обрезать все или подобрать бонусы, которые находятся на расстоянии мили от них.
Питор
2
-1 «Вопрос не показывает никаких исследовательских усилий».
Vaillancourt
на самом деле, вероятно, не дубликат, я узнал о схемах пространственного разделения и пространственных структурах данных, которых не было в другом вопросе
Саджит Дилшан Джамал

Ответы:

15

Независимо от осуществимости (да, в зависимости от масштаба) часто существуют лучшие или более простые способы.

Например, в вашей типичной MMO серверу действительно нужно знать только о грубой навигационной карте, используемой AI и поиском пути игрока. Вместо того, чтобы хранить местоположение дерева, вы можете просто вырезать отверстие в навигационной карте в месте нахождения дерева. Аналогично для любых других больших препятствий.

Даже в играх, где требуется более глубокое обнаружение столкновений, вы часто можете разбить это на обнаружение на стороне сервера и на стороне клиента. Сервер может просто заниматься грубым путем, в то время как клиент обрабатывает более чувствительное к анимации обнаружение столкновений. Например, раненый игрок пытается ползти по большой скале, чтобы найти укрытие от врагов. Сервер определяет , что игрок может двигаться по краю скалы (сервер не имеет представления о том , что там есть скала, только что есть путь, игрок может взять рядом с unpathable области) в то время как клиент знает , что порода присутствует и играет анимацию персонажа, опирающегося на камень, когда он идет. Обратите внимание, что клиент не движетсяперсонаж или влияющий на игровой процесс в любом случае в этом случае; это просто реагирует на близлежащие объекты с анимацией.

Вы, конечно, можете хранить большое количество объектов на сервере. Это ничем не отличается от любой игры с открытым миром. Используйте хорошую схему пространственного разделения и сохраняйте объем памяти ваших объектов настолько легким, насколько это возможно. Обратите внимание, что у нас могут быть разные версии «больших чисел» в наших головах: если вы имели в виду, что вы хотите хранить каждую маленькую гальку или камешек в игре как отдельный объект, то это просто глупо, даже для одиночной игры , :)

Шон Миддледич
источник
7

Да, это возможно. ММО часто разделяют игровой мир на несколько областей, поскольку это облегчает работу, но вы все равно можете делать это с 1 массивной областью - вам просто нужно использовать хорошую схему пространственного разделения.

Поскольку большинство объектов в ММО не перемещаются, вы также можете выполнить этап предварительной обработки, где объекты используются для создания деревьев проверки столкновений.

Объем памяти не является большой проблемой, пока вы используете инстансинг. Хранение пары поплавков для каждого объекта - ничто в общей схеме вещей. Скромный ПК в настоящее время будет иметь 4 гигабайта, а сохранение позиции - всего 3 поплавка (или 3 двойных), что позволит легко сохранить в игре несколько миллионов сохраненных объектов.

Хранение таких вещей, как материальные запасы для каждого игрока, несомненно, потребует больше данных - хотя это может быть легко кэшировано на диск и загружено только при входе игрока в систему.

Вы захотите избыточно выполнить проверку столкновений как на клиенте, так и на сервере, поскольку это позволит клиенту более оперативно реагировать на окружающую среду. Если игрок заходит в стену, вы хотите, чтобы он прекратил движение немедленно, а не через полсекунды, когда сервер отвечает.

Вы также хотите использовать сервер только для авторитетных вещей. Например, вы можете выполнять поиск пути только на клиенте, поскольку вы не можете обмануть, выбрав менее эффективный путь!

беспричинный
источник
спасибо за подсказку о схемах пространственного разделения, я узнал кое-что новое
Саджит Дилшан Джамал