相位技术的实现
魔兽世界从巫妖王之怒那个版本开始完善了他的 相位 (Phasing) 技术。简单说,就是在场景的相同区域,不同的玩家根据一些条件(一般是任务进度)的不同,会感受到不同的环境:场景可以不同、能交互的 NPC 不同等等。
这个技术可以给玩家在 MMO 中带来许多以往在单机游戏中才能体验的融入感。在 wow 之前,许多游戏策划都曾经想过让玩家可以通过完成剧情改变游戏的环境,但苦于找不到好的表现方式。这或许是因为大部分游戏策划都在以现实世界为参考去考虑技术能够实现的可能性,而在这个微创新年代,没有摹本可以参考就没有了思路。但我有些奇怪的是,在 wow 把相位技术展现给世界已经超过 4 年了,为啥山寨大国还没有全力跟进呢?
莫非是因为这里面还真有什么技术难点?
以前没有认真思考过相位技术如何简单的实现。我们在这期里程碑里还没有把这个提上案子,但读到我们的策划已经编写了大量剧情,似乎没有相位技术或类似的东西就无法实现啊。许多情节写的跟小说一样,动不动就天亮了、环境变了、NPC 死了、人群散了、BOSS 复活了 …… 说起来好像 wow 里某个任务就是这样做的,我们以后天然就要支持相位技术没啥问题似的。
昨天晚上就这个问题跟 mike 同学讨论了一下,初步定了个方案。
据说原来在网易的一些同学还真认真讨论过相位技术如何实现,道听途说,我也不了解细节。大致说是希望放在 AOI 模块中解决一部分问题。就是让每个玩家的可见对象受底层模块的一些参数控制,他只能看到他能看到的景物。
也就是说,不同位面的 NPC 实际上全部存在于一个场景,只是被位面约束,可能不可见而已。
我们就这个可能的解决方案做了讨论,一致认为过于复杂了。相位技术不仅仅是要解决可见性问题,还需要解决互动问题。用这个方案的难点在于,即使我们可以在玩家对象上做一个可见性过滤(这倒是在我们现在的架构上,很容易实现),也很难去处理交互问题。比如释放一个 AOE 法术攻击一个区域内的对象,就需要给法术本身也设置位面影响。而玩家可以独立在一个服务内计算,将法术对象也独立出来就不太现实。这样做的结果会带来不可控的复杂性,以及很多性能问题。
所以我们觉得采用更纯粹的方案可能更好。不一定要完全和 wow 的一致,但能满足剧情任务表现的要求即可。
简单的方案是,如果一个场景因为上面的任务线的不同,而可能有不同的位面。那么、我们就实际去制作多个不同的场景(指服务器的配置)然后全部位面都独立启动起来。
指定一个主位面,它是覆盖全地图的。其它位面都有一定的影响区域。也就是说,次位面在地图大小上和主位面一样,只是布置的 NPC 对象不同,但一般只在一个较小区域上布置。
玩家会因为任务进度的关系进入次位面,但在次位面上移动超过影响区域就自动切回主位面。玩家处于不同位面实际上是处于不同的场景服务中。但这个切换的代价是相当之小的。首先客户端并不需要移动位置,也不需要加载场景。玩家不会感觉到停顿。服务器那边,相同地图的不同位面一定是在同一进程中,只是把绑定在玩家上的 agent 切换了交互 map 而已。
第一步我们暂时实现任务链对位面切换的影响,这样策划通过配置任务表格就可以切换到他们专门为任务配置的次位面中。区分主次位面,而不是等同对待,是为了配置规则简单,而非实现上的区别。
之后,我们需要制定一些基本规则,防止在相位穿帮时有一个明确的处理规范。当然策划在应用这个技术时也需要积累一些经验,考虑对一些 PvP 玩法的影响。
这次先写这么多记录一下想法,估计要到一个月后才会开始实现。
Comments
Posted by: sunshuo | (26) August 4, 2020 06:36 PM
Posted by: Diomedea | (25) October 22, 2018 04:52 AM
Posted by: 牛牛跳水 | (24) November 27, 2013 05:37 PM
Posted by: LyneXiao | (23) March 28, 2013 08:25 PM
Posted by: shooga | (22) December 14, 2012 02:41 PM
Posted by: 大笨猫同学 | (21) December 8, 2012 12:53 PM
Posted by: 大笨猫同学 | (20) December 8, 2012 12:52 PM
Posted by: a | (19) December 1, 2012 01:04 AM
Posted by: 唐诗 | (18) November 29, 2012 02:53 PM
Posted by: Siney | (17) November 28, 2012 05:31 PM
Posted by: kankan | (16) November 27, 2012 11:00 PM
Posted by: ninjacatii | (15) November 27, 2012 09:21 PM
Posted by: cccs | (14) November 27, 2012 10:30 AM
Posted by: ccc | (13) November 27, 2012 10:19 AM
Posted by: ccc | (12) November 27, 2012 10:19 AM
Posted by: eliteYang | (11) November 26, 2012 09:52 PM
Posted by: nleaf | (10) November 23, 2012 10:35 PM
Posted by: 邓安良 | (9) November 23, 2012 06:17 PM
Posted by: Joe | (8) November 23, 2012 05:02 PM
Posted by: Joe | (7) November 23, 2012 04:58 PM
Posted by: Joe | (6) November 23, 2012 04:57 PM
Posted by: CoolDesert | (5) November 23, 2012 02:15 PM
Posted by: icicle | (4) November 23, 2012 02:02 PM
Posted by: ghost | (3) November 23, 2012 01:33 PM
Posted by: JackyCBN | (2) November 23, 2012 01:09 PM
Posted by: laneovcc | (1) November 23, 2012 12:35 PM