在MMO的服务器端存储每个对象的坐标


12

在MMORPG中:

将每棵树,灌木丛等的坐标存储在服务器端以进行碰撞检测是典型的还是可行的?

如果是这样,什么是存储如此大量坐标(数据结构等性能问题处理)的可行方法?

如果不是,这种冲突检测是否完全在客户端完成,而服务器根本不检查?

还是有中间立场,由客户端检查冲突并由服务器验证?如果是这样,服务器又如何在不将坐标保存在服务器中的情况下进行验证?


2
我对此还不太了解,无法给出一个好的答案,但是如果您仅在客户端进行冲突检测,那么作弊者将找到一种方法来剪辑所有内容,或者获得距离他们很远的道具。
Peethor

2
-1“问题未显示任何研究成果”。
Vaillancourt


实际上,可能不是重复的,我了解了另一个问题没有的空间分区方案和空间数据结构
Sajith Dilshan Jamal

Answers:


15

与可行性无关(是的,取决于规模),通常有更好或更简单的方法。

例如,在典型的MMO中,服务器实际上只需要知道AI和玩家寻路所使用的粗略导航图。除了存储树的位置外,您还可以在树的位置的导航图中切一个孔。对于其他任何重大障碍也是如此。

即使是需要更深入的碰撞检测的游戏,您也经常可以将其分解为服务器和客户端检测。服务器只需要考虑粗略的路径,而客户端则可以处理更多对动画敏感的碰撞检测。例如,一名受伤的玩家试图沿着一块大石头爬行以寻找敌人的藏身之处。该服务器确定一个玩家可以沿着岩石的边缘移动(服务器有没有想法,有一个摇滚,只是有玩家未来可以采取的unpathable区域的路径),而客户端知道岩石存在并在角色走动时播放动画,将自己支撑在岩石上。请注意,客户端没有移动在这种情况下,其角色或影响游戏玩法的方式不限;它只是通过动画对附近的物体做出反应。

您当然可以在服务器上存储大量对象。它与任何开放世界游戏都没有什么不同。使用良好的空间分区方案,并尽可能减少对象的内存占用。请注意,这里我们的脑中可能会有不同版本的“大数字”:如果您想将游戏中的每个小卵石或岩石颠簸存储为单独的对象,那么即使对于单人游戏,这也很愚蠢。 。:)


7

是的-这是可行的。MMO通常会将游戏世界划分为多个区域,因为这使工作变得更容易,但是您仍然可以在1个大区域中做到这一点-您只需要使用一个好的空间分区方案即可。

由于MMO中的大多数对象不会移动,因此您还可以执行预处理过程,在该过程中使用对象创建碰撞检查树。

只要您使用实例化,内存占用就不是一个大问题。在一个宏伟的计划中,每个对象存储一对浮标是没有什么的。如今,一台适中的PC将具有4 GB,而存储位置仅为3个浮点数(或3个双倍数),这很容易在游戏中存储数百万个对象。

为每个玩家存储库存之类的东西无疑会占用更多数据,尽管可以轻松地将其缓存到磁盘上,并且仅在玩家登录时才加载。

您将需要冗余地在客户端和服务器上进行冲突检查,因为这将允许客户端对环境做出更快速的响应。如果玩家走进墙壁,您希望他们立即停止移动-而不是在服务器响应后半秒钟后停止移动。

您也只想将服务器用于权威性的事情。例如,您只能在客户端上执行寻路,因为您不能通过使用效率较低的路径来作弊!


感谢有关空间分配方案的提示,我学到了一些新知识
Sajith Dilshan Jamal
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.