唯一的游戏世界
今天写下上一篇 blog 之后,跟另一个组的同事讨论了我的这篇文章。他们的项目先是多服务器的架构,后来重构后改成了单服务器的设计。我们的讨论第一个出现的分歧就是在于对多服务器设计的复杂度会造成的影响。
讨论了一段时间后发现大家的对一些问题的定义从一开始就有区别。回头来大家换个角度讨论了一下,发现其实那些分歧都是不存在的。
讨论告一段落后,我浏览了一遍聊天记录,觉得有必要总结一下 :)
三年前,我跟公司一些策划同事有接连几天的争执:到底玩家是否需要一个宏大的虚拟世界?或是我们若实现这样一个虚拟世界,到底有没有价值?该怎样维护这样的一个大世界,让它不会受到一些暂时性设计 bug 的毁坏性影响?
可以说,三年前的争论是导致我成立独立团队做现在这样一个项目的重要起因之一。因为当时,我几乎得不到任何的支持,策划,程序,美术方面等等几乎都是不赞成的意见。
那个时候,我也的确找不到确凿的证据来说服大家。但今天,思路清晰了许多。
首先,提高单组游戏服务器的同时在线承载能力对给玩家带来更大乐趣并无太大积极意义。这是我一直都持有的观点。所以,我对公司已经完全购买的 Bigworld 游戏引擎不以为然。这个引擎最大的优势在于它的服务器组负载均衡做的非常不错,可以让更多的玩家互动。btw, bigworld 在技术上是非常不错的,代码质量就我读过的部分来看,也是颇佳。
如同现实中的人的社交活动一样,人们不需要太多人的完全交互,也不希望独身一人。人在一个合适规模的团体中生活是最舒适的。一味的提高单组服务器的承载能力,有如扩大虚拟世界中人同时能参与的社交活动的规模。可就算在虚拟世界中开奥运会,也没有人去参加所有的项目。也不会让所有的项目在一个体育场去开。
所以我不关心一个逻辑服务器是由多台机器还是单台机器构成的,那些是技术细节。游戏的设计本身就应该避免很高承载力的需求。
但是,我们需要保留所有玩家在一个整体的虚拟世界中相互交流的可能性。这会衍生出很多给玩家带来更多乐趣的新玩法。这些跟简单加大交互数量的所谓“更多人的国战”是有区别的。
设计所谓跨服务器的玩法,也应该和单一服务器内部实现的玩法有所区别。就如现实世界中,你或许可以跟银河系那一头的外星人交换信息,但是绝对不可能发生实时的互动。光速的极限在那儿摆着呢。
我们设计的跨服务器的玩法,都可只基于一个原语:即对象的传递(而不是类似对象的远程控制之类的东西)。我们需要唯一解决的技术问题是:如何安全的把对象传递到另一个世界中,而不出现丢失或复制。时间和效率是很次要的东西,这一点跟服务器内的交互设计截然不同。
一个全局的数据库是没有必要的,各个游戏世界应该是对等的,没有一个特权世界。信息的即时同步永远是没有必要的。这跟现实世界中,永远有光速的屏障一样。
比如一个帮会系统,成员分布在不同的服务器中。那么查询到当前所有帮会成员名单这种需求就是没有意义的。最多你可以查到当前世界中的名单,但是你对另外世界的成员名单的了解只能是过期的信息。
玩家角色在服务器之间迁徙也是这样,我设想的最简单合理的设计是:角色必须光着身子被传送到另一个世界(好似终结者)。也就是角色本身的等级技能这些被复制(或传送)过去,而物品则需要通过游戏中的物流来输送。
角色被传送后,可能需要一段时间才能到达,但玩家可以操作他在原有世界中继续做一些有限的事情。一旦送达后,踢出旧世界,在新世界登陆即可。我们甚至可以不允许在新世界中被传回,只需要把新世界中得到的经验等人物属性转换为物品邮寄回来即可。你在那个世界中的你可以看成你在新世界中的一个副本。
游戏的局部世界和局部世界之间只要设计出逻辑上的距离,距离制造了时间差。由于对象传递是一个原语,一切服务器间的交流都依赖这个原语;这就好比现实世界的光速屏障一样;可以有效隔绝统一世界中各个局部间的矛盾。无论这些矛盾是由于部分玩家在局部利用一个 bug 引起,还是大家发展时间长短的不一致引起的。
我希望在我们的新游戏中,既可以让玩家个体做个人的奋斗,又可以让团体在一个唯一的大世界中攻城略地、争夺资源、建立商业网络…… 我想这些都会是激动人心的东西。我知道很多网游都想过这些试着做这些,却几乎没有看到谁成功的给玩家带来更多的乐趣。那是否这次实现会略有不同呢?
Comments
Posted by: 单一世界 | (19) June 29, 2009 05:32 PM
Posted by: Holimion | (18) July 25, 2007 04:08 PM
Posted by: b(^_^)b | (17) July 22, 2007 06:53 PM
Posted by: Cloud | (16) July 16, 2007 01:27 PM
Posted by: Anonymous | (15) July 16, 2007 04:39 AM
Posted by: Anonymous | (14) July 16, 2007 04:36 AM
Posted by: 七夜魔皇 | (13) July 14, 2007 08:24 PM
Posted by: skro | (12) July 12, 2007 01:00 PM
Posted by: d | (11) July 12, 2007 11:22 AM
Posted by: Zeroto | (10) July 11, 2007 01:59 PM
Posted by: cjxx | (9) July 10, 2007 07:28 PM
Posted by: 七夜魔皇 | (8) July 8, 2007 11:07 PM
Posted by: Cloud | (7) July 6, 2007 06:02 PM
Posted by: 胜胜的风 | (6) July 6, 2007 04:55 PM
Posted by: 王者之剑 | (5) July 6, 2007 11:54 AM
Posted by: Linker M Lin | (4) July 6, 2007 09:21 AM
Posted by: func | (3) July 6, 2007 08:57 AM
Posted by: Anonymous | (2) July 6, 2007 05:37 AM
Posted by: Atry | (1) July 6, 2007 12:21 AM